Java 如何在Hibernate中更新实体的某些字段?
我在web应用程序中使用Spring和Hibernate。我拥有如下实体:Java 如何在Hibernate中更新实体的某些字段?,java,spring,hibernate,jackson,Java,Spring,Hibernate,Jackson,我在web应用程序中使用Spring和Hibernate。我拥有如下实体: @Entity public class MyClass{ @Id @GeneratedValue protected Long id; protected String prop1; protected String prop2; /* * Getters And Setters */ } @Inject SessionFactory sf; @Requ
@Entity
public class MyClass{
@Id
@GeneratedValue
protected Long id;
protected String prop1;
protected String prop2;
/*
* Getters And Setters
*/
}
@Inject
SessionFactory sf;
@RequestMapping("update")
@Transactional
public void update(@RequestBody MyClass myClass){
sf.getCurrentSession.update(myClass);
}
{
"prop1": "my value1",
"prop2": "my value2"
}
当我想更新此实体的实例时,我使用jackson从客户端获取实例,如下所示:
@Entity
public class MyClass{
@Id
@GeneratedValue
protected Long id;
protected String prop1;
protected String prop2;
/*
* Getters And Setters
*/
}
@Inject
SessionFactory sf;
@RequestMapping("update")
@Transactional
public void update(@RequestBody MyClass myClass){
sf.getCurrentSession.update(myClass);
}
{
"prop1": "my value1",
"prop2": "my value2"
}
用户数据如下:
@Entity
public class MyClass{
@Id
@GeneratedValue
protected Long id;
protected String prop1;
protected String prop2;
/*
* Getters And Setters
*/
}
@Inject
SessionFactory sf;
@RequestMapping("update")
@Transactional
public void update(@RequestBody MyClass myClass){
sf.getCurrentSession.update(myClass);
}
{
"prop1": "my value1",
"prop2": "my value2"
}
这是正确的。我的问题是当我只想更新prop1
时。在这种状态下,我还必须设置prop2
。如果我没有,它会将prop2
更新为null
如何在不将
prop2
从客户端发送到服务器的情况下只更新prop
?您可以在pojo类上使用@DynamicUpdate注释。这仅更新所需字段
样本:
@Entity
@DynamicUpdate//Add this annotation for updating selected fields
public class MyClass{
@Id
@GeneratedValue
protected Long id;
protected String prop1;
protected String prop2;
/*
* Getters And Setters
*/
}
可以在pojo类上使用@DynamicUpdate注释。这仅更新所需字段 样本:
@Entity
@DynamicUpdate//Add this annotation for updating selected fields
public class MyClass{
@Id
@GeneratedValue
protected Long id;
protected String prop1;
protected String prop2;
/*
* Getters And Setters
*/
}
@DynamicCupDate无法解决您的问题。此注释仅用于性能优化 如果只想更新实体的某些属性,以下是一些方法:
@DynamicCupDate无法解决您的问题。此注释仅用于性能优化 如果只想更新实体的某些属性,以下是一些方法:
必填字段?哪些字段是必需的?我的意思是,只有您正在更新的相应字段您现在面临的问题或情况是什么。我只设置了
prop1
,在更新操作中它不包含prop2
值。首先,您需要在将请求发送到服务器时保留请求正文中的所有值。如果缺少任何字段,将被视为更改,并将被视为UpdateRequired字段?哪些字段是必需的?我的意思是,只有您正在更新的相应字段您现在面临的问题或情况是什么。我只设置了prop1
,在更新操作中它不包含prop2
值。首先,您需要在将请求发送到服务器时保留请求正文中的所有值。如果缺少任何字段,将被视为更改并考虑进行更新如果您希望控制要触发的确切更新查询(即,查询中应包含哪些字段),请使用HQL update语句。使用session.save/update/merge/saveOrUpdate hibernate在内部创建查询,您可能不需要细粒度的控制。您应该使用spring数据JPA。有一些非常好的例子可以让您轻松地完成所有CRUD操作。如果您想控制要触发的确切更新查询(即,查询中应包含哪些字段),请使用HQL update语句。使用session.save/update/merge/saveOrUpdate hibernate在内部创建查询,您可能不需要细粒度的控制。您应该使用spring数据JPA。有一些非常好的例子可以让您轻松完成所有CRUD操作。第三个建议中可能重复的是,MyClass
必须有getter/setter方法。HQL是否使用getter/setter方法进行更新?在第三个建议中,MyClass
必须使用getter/setter方法。HQL是否使用getter/setter方法进行更新?