hibernate - 仅选择/加载字段

时间:2016-09-27 09:02:30

标签: java hibernate

我想在Hibernate表映射/实体类中添加一个字段。

我希望此字段不会映射到实际的表列,我希望Hibernate不要尝试将其插入/更新到数据库。

但我希望能够通过DAO中的自定义选择加载此字段,例如通过

query.addEntity(getPersistentClass().getName());

我最接近的是制作字段@Transient
但是,即使是select也没有加载它的值。所以这不是
我真的需要。

这有可能吗?若然可能如何?

3 个答案:

答案 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。

这样,不会插入或更新此属性,但可以在选择中使用。