【问题标题】:Hibernate is calling public methods on the entities after a query, why?Hibernate 在查询后调用实体上的公共方法,为什么?
【发布时间】:2010-10-12 10:01:23
【问题描述】:

我使用的是休眠 3.0(带有 posgre 8.3)、Java 1.6 和 Netbeans 6.5。我创建了一个原生查询来返回所有唯一的最新条目,如下所示:

String query = "SELECT DISTINCT ON (origem) * FROM entrada " +
                "ORDER BY origem, horadata DESC";
        SQLQuery sqlQuery = this.getSession().createSQLQuery(query);
        sqlQuery.addEntity(Entrada.class);
        List entradas = sqlQuery.list();

当调用“sqlQuery.list()”时,Entrada 对象按预期返回。但是对象 Entrada 中的所有公共非静态方法都会被调用。我不想要这种行为,有人可以帮助我吗? 提前致谢。

【问题讨论】:

  • 您希望 Hibernate 如何填充您的 Entrada 对象?

标签: java hibernate postgresql netbeans6.5


【解决方案1】:

什么是“所有”公共方法?

当 hibernate 创建实体并从数据库中填充数据时,会调用 Getter 和 setter。由于实体类必须满足 java bean 规范,因此不应该有任何公共方法,除了 hashCode()、toString()...

【讨论】:

  • 你是对的,get方法被调用了。我在实体中创建了一些方法来调用 DAO 上的其他方法。我没有使用 hibernate 和 java 的经验。
  • 又一个问题!我应该把业务方法和其他属性放在哪里?
  • 实体不应该有任何业务逻辑。阅读 JPA 规范的前 100 页!在我看来,业务逻辑是持久层的一部分。这一层提供业务方法,使用hibernate/jpa做OR-mapping。
猜你喜欢
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2013-03-19
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
相关资源
最近更新 更多