如何告诉hibernate不更新某些列

时间:2011-11-11 17:58:36

标签: java database hibernate

我有一个应用程序,可以让用户有机会更新某些值。我想只将这些列的信息发送给用户并进行更新。

我想坚持从他们发送给我的内容创建的hibernate实体,但不更新用户无权访问的列。同样,如果他们请求新条目,我想使用他们发送给我的数据并将未提及的列设置为数据库默认值。

是否有简单的方法或最佳实践可供使用?

我是否应该创建第二个映射到该表但没有提到这些列的映射?

4 个答案:

答案 0 :(得分:6)

我想我会在映射文件上标记属性update =“false”。我很想知道是否有办法按持续时间做,所以如果我写了其他应该改变这些字段的东西,它就可以做到。

答案 1 :(得分:1)

如果您不希望更新这些列,只是不要调用这些列的setter?如果未调用列的setter(或使用新值调用),则不会更新该列。

您需要首先使用hibernate获取条目,然后调用setter以获取相应的列,然后保留它。这样,您不想更改的数据就不会改变。

答案 2 :(得分:1)

在Hibernate中使用updatable = false以避免更新列。

例如:

@Column(name=CRE_TS, updatable=false)
private Date getCreTs(){
   return this.creTs;
} 

答案 3 :(得分:0)

我的要求是我不想更新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();