Java 使用不同的值休眠同一对象
比如说,我有一个带有特定列的类Java 使用不同的值休眠同一对象,java,hibernate,Java,Hibernate,比如说,我有一个带有特定列的类 Class A { private String A; private String B; private String C; // Getter Setter of respectives } 现在发生了什么,我有相同的列A和列B的值,只有列C的值发生了变化。所以我做了下面的事情 A a = new A(); a.setA(..); a.setB(..); for(i=0;i<length;i++){ a.s
Class A
{
private String A;
private String B;
private String C;
// Getter Setter of respectives
}
现在发生了什么,我有相同的列A和列B的值,只有列C的值发生了变化。所以我做了下面的事情
A a = new A();
a.setA(..);
a.setB(..);
for(i=0;i<length;i++){
a.setC(..);
getHibernateTemplate.saveOrUpdate(a);
// or something like this
// A a1 = new A();
// a1 = a;
// a1. setC(..);
// getHibernateTemplate.saveOrUpdate(a1);
}
A A=新A();
a、 刚毛(…);
a、 挫折(……);
对于(i=0;iYes)。尝试save(a)
而不是save或update(a)
是。请尝试save(a)
而不是save或update(a)
您尚未描述实际的实体详细信息。如果要使用相同的值保存实体,请将标识符属性设置为null
根据文件-
saveOrUpdate()
- 如果对象在此会话中已持久化,则不执行任何操作
- 如果与会话关联的另一个对象具有相同的
标识符,引发异常
- 如果对象没有标识符属性,则保存它()
- 如果对象的标识符的值已分配给新的
实例化对象,保存()它
- 如果对象的版本由or控制,则
版本属性值与分配给新版本的属性值相同
实例化对象,保存()它
- 否则,更新()对象
saveOrUpdateAll()
- 根据其id(与配置的“未保存值”匹配)保存或更新所有给定的持久实例。将实例与当前Hibernate会话关联
[如果有效,可以为您的其他人尝试此功能]
编辑:这是我的疏忽,我没有仔细检查你的代码。
您已在for循环外部定义了对象A
,因此在每次迭代中都会更新相同的对象。请尝试下面的代码,可能会有所帮助
for(i=0;i<length;i++){
A a = new A(); //-- Create new object for each iteration
a.setA(..);
a.setB(..);
a.setC(..);
getHibernateTemplate.saveOrUpdate(a);
}
for(i=0;i您尚未描述实际的实体详细信息。如果要使用相同的值保存实体,请将标识符属性设置为null
根据文件-
saveOrUpdate()
- 如果对象在此会话中已持久化,则不执行任何操作
- 如果与会话关联的另一个对象具有相同的
标识符,引发异常
- 如果对象没有标识符属性,则保存它()
- 如果对象的标识符的值已分配给新的
实例化对象,保存()它
- 如果对象的版本由or控制,则
版本属性值与分配给新版本的属性值相同
实例化对象,保存()它
- 否则,更新()对象
saveOrUpdateAll()
- 根据其id(与配置的“未保存值”匹配)保存或更新所有给定的持久实例。将实例与当前Hibernate会话关联
[如果有效,可以为您的其他人尝试此功能]
编辑:这是我的疏忽,我没有仔细检查你的代码。
您已在for循环外部定义了对象A
,因此在每次迭代中都会更新相同的对象。请尝试下面的代码,可能会有所帮助
for(i=0;i<length;i++){
A a = new A(); //-- Create new object for each iteration
a.setA(..);
a.setB(..);
a.setC(..);
getHibernateTemplate.saveOrUpdate(a);
}
for(i=0;iThanks,我对您的解决方案投了赞成票,但这对我不起作用,这只是我的代码的一个概念,因为我无法在这里解释整个代码,但是在我的代码中,我使用saveOrUpdateAll()保存整个集合的方法,hibernateTemplate类没有saveAll()方法,在这种情况下,我应该怎么做?我以前考虑过这个问题,我在这里也问过相关的问题。谢谢,我对你的解决方案投了赞成票,但这对我来说不起作用,这只是我的代码的一个概念,因为我无法在这里解释整个代码,但是在我的代码中,我使用方法通过saveOrUpdateAl保存整个集合l()和hibernateTemplate类没有saveAll()方法,在这种情况下,我应该怎么做?我以前考虑过这个问题,我在这里也问过相关的问题。我尝试过将标识符值设置为null,但它不起作用。这会起作用,但我不想设置setA()和setB()这也是我关心的。@为此,您可以在entity中显式定义方法,以返回具有默认值的新对象或适当的构造函数,或者可以clone()
&然后只能设置要更改的必填字段。我尝试将标识符值设置为null,但无效。这样可以,但我不想设置setA()和setB()同样,这也是我关心的。@为此,您可以在entity中显式定义方法,以返回具有默认值或适当构造函数的新对象,或者可以clone()
&然后只设置要更改的必填字段。