我正在使用带有播放框架的EbeanServer来与我的PostGreSQL数据库进行交互。
我正在使用程序化交易来检索/更新数据库中的条目,如Link下的"程序化交易"所述。当我提交新条目的交易时,ebeanServer.save()
,ebeanServer.delete()
和ebeanServer.insert()
对我来说非常有效。
但是当我尝试更新现有条目(使用ebeanServer.update()
或ebeanServer.save()
)时,我的数据库中的条目不会更新。在此期间,我使用ebeanServer.delete()
后跟ebeanServer.insert()
来更新我的条目,但这非常无效。
我确保使用ebeanServer.commitTransaction();
和最后ebeanServer.endTransaction();
提交我的交易。
如何解决此类问题,因为我无法在stackoverflow上找到任何相关主题?
谢谢!
更新: 一个小的日志显示更新没有被执行:(它应该更新判别式和字典条目!虽然,它在我需要时从表中选择它们!
[info] o.j.ConnectionLogger - connect to URL jdbc:postgresql://localhost:5432/ProjetEeaah?user=postgres&password=0000 for user postgres
[info] o.j.StatementLogger - select t0.id c0, t0.language c1, t0.topic c2, t0.topic_stop_words c3, t0.end_session_flag c4, t0.end_of_execution_in_background c5 from session t0 where t0.id = 7 ;
[info] o.j.StatementLogger - insert into cluster (session_id) values (7);
[info] o.j.StatementLogger - insert into ideas (sentence, treated_idea, session_id, cluster_id) values ('plays',N,7,9);
[info] o.j.StatementLogger - select t0.id c0, t0.stop_word c1 from session_stop_words t0 where t0.session_id = 7 ;
[info] o.j.StatementLogger - select t0.id c0, t0.lemma c1, t0.derivative c2, t0.derivative_freq c3, t0.session_id c4 from lemmas_and_derivatives_used_in_session t0 where t0.session_id = 7 ;
[info] o.j.StatementLogger - insert into idea_word_set_without_stop_words (word, freq, session_id, idea_id) values ('play',1,7,41);
[info] o.j.StatementLogger - insert into cluster_word_freq (word, freq, session_id, cluster_id) values ('play',1,7,9);
[info] o.j.StatementLogger - select t0.id c0, t0.word c1, t0.freq c2, t0.session_id c3 from dictionary t0 where t0.session_id = 7 ;
[info] o.j.StatementLogger - select t0.id c0, t0.discriminant c1, t0.freq c2, t0.session_id c3 from discriminants t0 where t0.session_id = 7 ;
[info] o.j.StatementLogger - select t0.id c0, t0.lemma c1, t0.derivative c2, t0.derivative_freq c3, t0.session_id c4 from lemmas_and_derivatives_used_in_session t0 where t0.session_id = 7 ;
[info] o.j.StatementLogger - insert into discriminant_freq_of_lemmas_per_cluster (lemma, freq, session_id, cluster_id) values ('play',1,7,9);
[info] o.j.StatementLogger - insert into lemmas_and_derivatives_used_per_cluster (lemma, derivative, derivative_freq, session_id, cluster_id) values ('play','plays',1,7,9);
[info] o.j.StatementLogger - delete from lemmas_and_derivatives_used_in_session where id=21;
[info] o.j.StatementLogger - insert into lemmas_and_derivatives_used_in_session (id, lemma, derivative, derivative_freq, session_id) values (21,'play','plays',8,7);
更新2:这是代码的一部分
//I am using ebeanServer.find... in an earlier part of the code to retrieve the
// entries from the database and as seen in the log above it is working fine!
//I checked and the if condition is valid and it is executing the inner block!
if(dicoContainsWord){
//get dictionary entry and discriminant entry
Dictionary currentDicoEntry = dictionary
.stream()
.filter(o -> o.word.equals(currentWord)).findFirst()
.get();
Discriminants currentDiscriminantEntry = discriminants.stream()
.filter(o -> o.discriminant.equals(currentWord)).findFirst()
.get();
//update Frequencies in dictionary
currentDicoEntry.freq=currentDicoEntry.freq + currentWordfreq;
//updatedDictionaryEntries.add(currentDicoEntry);
//update frequencies in discriminants
currentDiscriminantEntry.freq= currentDiscriminantEntry.freq+1; //increment by 1
//updatedDiscriminantEntries.add(currentDiscriminantEntry);
//TODO now working fine but tryto change delete/insert to update
//UPDATE ENTRIES
//ebeanServer.delete(currentDicoEntry);
//ebeanServer.delete(currentDiscriminantEntry);
//ebeanServer.insert(currentDicoEntry);
//ebeanServer.insert(currentDiscriminantEntry);
//This is where it should update these entries
ebeanServer.update(currentDicoEntry);
ebeanServer.update(currentDiscriminantEntry);
//The ebeanServer.commitTransaction() is executed in a later part of the code! and it is always working
}
编辑(已解决问题):
我通过为每个模型定义Getters和setter来解决我的问题。
在此之前,我只是使用objectName.attribute = new value
,ebeanServer在更新期间没有考虑到这一点。
我希望这会有所帮助。