Hlavně tam nesmí být takové to:
entity = connection.query(anything)
entity.name = "Jozef"
connection.persist(entity)
Jak bys řešil transakce?
Vycházíš z ne úplně odůvodněného předpokladu, že to mám promyšlené.
cca takhle, asi, možná:
posts = Collection<Post>
users = Collection<User>
try {
author = User("John", "Dee")
item = Post(author, "title", "content")
item.discuss.add(Comment("author 1", "lorem ipsum 1"))
item.discuss.add(Comment("author 2", "lorem ipsum 2"))
posts.add(item)
users.add(author)
}
catch (Exception e) {
console.log(e.message)
}
Transakce slouží k tomu, aby vytvořili atomický blok. Mohu na to vytvořit spešl syntax, nebo zneužít třeba ty výjimky. Ta atomicita způsobí, že dokud není dokončeno, tak se změna neprojeví nikde, ani v jiném vláknu té samé instance, ani v jiné instanci sdílící stejný stav.
Shodou okolností reálný kód na neidealistické platformě (pseudokod):
posts = Collection<Post>
users = Collection<User>
conn.transaction(conn => {
author = User("John", "Dee")
item = Post(author, "title", "content")
item.discuss.add(Comment("author 1", "lorem ipsum 1"))
item.discuss.add(Comment("author 2", "lorem ipsum 2"))
posts.add(item)
users.add(author)
conn.flush(posts)
conn.flush(users)
}, e => {
console.log(e.message)
})
Výše uvedený kód by pak měl vypadat takto:
try {
entity = users.find(anything)
entity.name = "Jozef"
}
catch (Exception e) {
console.log(e.message)
}