1
我有以下實體Hibernate不持久化對象的所有字段
@Entity
@Table(name = "Example")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class Example implements Comparable<Example>, Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long id;
String fieldToPersist;
}
其DAO
public class ExampleDAO {
public SessionFactory sessionFactory;
public Session session;
public ExampleDAO(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
this.session = sessionFactory.openSession();
}
@Transactional
public void createOrSave(Example ex) {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Example exExisting = getById(ex.id);
try {
if (exExisting != null) {
session.merge(ex);
tx.commit();
} else {
session.save(ex);
}
} catch (RuntimeException e) {
tx.rollback();
} finally {
session.close();
}
}
在我的代碼
我設置
example.setFieldToPersist("abc")
dao.createOrsave(example);
對於某些原因,這不會持續在da tabase。我看到了對DAO方法的調用,並且在日誌中看到沒有錯誤。但是這個字段沒有保存在數據庫中(雖然保存了對象)
我相信session.merge()
調用存在一些問題。如果我刪除它只保存該對象,它會爲該對象創建一個新行,但新的字段將被保存。有什麼我失蹤了嗎?
我還注意到,第一次對對象進行更改並調用createOrSave()方法時,它正確地更新了對象。但將來調用這個方法似乎不會更新它?會話是否過時?日誌是否應該提供一些相關信息?
我還在合併調用之前確認了字段的值,它是新的值。爲什麼這不反映在數據庫中?
我也曾嘗試follwoing方法,而不是合併
session.save() -- creates a new entry in the database with the updated values
session.update() - no change
session.saveOrUpdate() -- no change
session.flush() -- no change
謝謝,改變它,但是似乎沒有解決這個問題 –
你還可以嘗試致電 '示例ex = getById(ex.id); ' After: 'Transaction tx = session.beginTransaction();' – KuroObi
同樣的問題,嘗試獲取trabsaction後的對象開始 –