我想在Hibernate表映射/实体类中添加一个字段。
我希望此字段不会映射到实际的表列,我希望Hibernate不要尝试将其插入/更新到数据库。
但我希望能够通过DAO中的自定义选择加载此字段,例如通过
query.addEntity(getPersistentClass().getName());
我最接近的是制作字段@Transient
,
但是,即使是select也没有加载它的值。所以这不是
我真的需要。
这有可能吗?若然可能如何?
答案 0 :(得分:1)
好吧,如果我明白你想做什么,那么我认为像这样的解决方案
@Column(name =“{name of column}”,updatable = false)
这样,一旦创建了对象,hibernate就不会尝试更新此列
答案 1 :(得分:1)
你的吸气器必须更聪明一些。 例如,你可以像春天那样使用HibernateCallback接口:
public String getName(Session session) {
return new HibernateCallback<String>() {
@Override
public String doInHibernate(Session session) throws HibernateException {
return session.createSQLQuery("SELECT NAME FROM MY_TABLE WHERE SOME_CONDITIONS").uniqueResult();
}
}.doInHibernate(session);
}
更好的方法是在另一个可以访问会话的类中创建一种执行方法。
使用该解决方案,您仍然可以将字段标记为@Transient
。
答案 2 :(得分:0)
你可以使用 @Column(name =&#34; {name of column}&#34;,insertable = false,updatable = false)
不要将该字段标记为@Transient。
这样,不会插入或更新此属性,但可以在选择中使用。