【发布时间】:2011-11-11 17:58:36
【问题描述】:
我有一个应用程序可以让用户有机会更新某些值。我只想将这些列上的信息发送给用户并进行更新。
我想保留从他们发送给我的内容创建的休眠实体,但不更新用户无权访问的列。同样,如果他们请求新条目,我想使用他们发送给我的数据并将未提及的列设置为数据库默认值。
有没有简单的方法或最佳实践?
我是否应该创建第二个映射到未提及这些列的表?
【问题讨论】:
我有一个应用程序可以让用户有机会更新某些值。我只想将这些列上的信息发送给用户并进行更新。
我想保留从他们发送给我的内容创建的休眠实体,但不更新用户无权访问的列。同样,如果他们请求新条目,我想使用他们发送给我的数据并将未提及的列设置为数据库默认值。
有没有简单的方法或最佳实践?
我是否应该创建第二个映射到未提及这些列的表?
【问题讨论】:
我想我会在映射文件上标记属性 update="false"。我很想听听是否有办法坚持下去,所以如果我写了其他东西来改变这些领域,它可以做到。
【讨论】:
在 Hibernate 中使用 updateable=false 以避免更新列。
例如:
@Column(name=CRE_TS, updatable=false)
private Date getCreTs(){
return this.creTs;
}
【讨论】:
如果您不想更新这些列,就不要调用这些列的设置器吗?如果未调用列的 setter(或使用新值调用),则不会更新该列。
您需要先使用 hibernate 获取条目,然后调用相应列的设置器,然后将其持久化。这样,您不想更改的数据就不会更改。
【讨论】:
我的要求是我不想更新method1()中的列,但它应该在method2()中更新,所以配置级别在这里不起作用。
解决方案是创建一个Cloneable POJO 并覆盖clone() 方法。
public class User implements Cloneable {
//properties
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
从会话中获取对象
User user = <from Session suppose>.
User clone = null;
try {
clone = (User) user .clone(); // clone the real object
} catch (CloneNotSupportedException e) {
//log your Exception here
}
clone.setUserName("Avinash");
transaction.commit();
}
session.close();
【讨论】: