我在一个项目中使用 Wicket、JPA+Hibernate
我有这样的持久性课程
@Entity
@Table(name = "document", uniqueConstraints = { @UniqueConstraint(columnNames = {
"name"}) })
public class Document
implements Serializable
{
private static final long serialVersionUID = 8496087166198616020L;
@Id
@GeneratedValue
private long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String state;
.....
Geter && setters
然后
我有用于 crud 操作的 dao 实现
一种方法是
@Override
@Transactional
public void createDocument(Document aDocument)
{
entityManager.persist(aDocument);
}
我的问题是,在 wicketPage 中,如果我使用 Wicket Link 并且它的 onclick 方法执行以下操作
document.setState("someState");
它在不专门调用 createDocument(document) 的情况下更新值,并且数据库也是最新的
但是如果我使用 AjaxLink 及其 onclick 方法
然后,我必须手动更新对象,否则数据库中的值将不会更新。我的修改应该如下:
@Override
@Transactional
public void createDocument(Document aDocument)
{
if(aDocument.getId()==0{
entityManager.persist(aDocument);
}
else{
entityManager.merge(aDocument);
}
然后要保存数据库中的更改,我必须首先更新状态和调用createDocument()
方法。
document.setState("someState");
dao.createDocument(document);
谁能指出为什么会发生这种情况?
非常感谢