我收到一个包含30个字段的JSON,我的实体是从这个JSON构建的。 问题是:不应更新两个字段(两个日期)。
如果我使用entity.merge
,则会更新这两个字段。
如何避免更新这两个字段?
也许使用标准。例如?
如果没有我写大量的HQL,有没有办法做到这一点?
答案 0 :(得分:10)
This article详细解释了你的问题,但我也会在这里总结一下。
如果您永远不想更新这两个字段,可以使用updatable=false
标记它们:
@Column(name="CREATED_ON", updatable=false)
private Date createdOn;
加载实体并进行修改后,只要当前Session
或EntityManager
处于打开状态,Hibernate就可以通过dirty checking mechanism跟踪更改。然后,during flush,将执行SQL
更新。
如果您不喜欢UPDATE
语句中包含所有列,则可以使用动态更新:
@Entity
@DynamicUpdate
public class Product {
//code omitted for brevity
}
然后,只有修改后的列才会包含在UPDATE
语句中。
答案 1 :(得分:1)
请像这样的例子:
public class UpdateMethodDemo {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Student s = studentService.getById(1);
s.setNom("FuSsA");
session.beginTransaction();
session.update(s);
session.getTransaction().commit();
session.close();
}
}
修改强>
您可以使用@Transient
注释来指示字段不会保留在数据库中。