我为我们拥有的表填充了一个 HBM 文件。我认为创建了 Hibernate 将使用的 Java 实体。在实体中,我有一个空的构造函数,然后是一个包含所有字段的完整构造函数。我也将它们按与 HBM 文件中的顺序相同的顺序排列。
每次 Hibernate 使用 Entity 时,它总是调用空构造函数而不是完整构造函数。
是否有技巧或任何东西可以使 Hibernate 使用完整的构造函数?这也发生在实体的所有孩子身上。我遇到了一个问题,我的 query.list() 运行缓慢,并希望让它工作以查看它是否会加快速度。
谢谢!
注意: 我没有包含 HBM 和 Java 文件的内容,因为 (a) 它包含公司信息 (b) 它相当大。将东西剥离出来需要很长时间。如果给您带来不便,我很抱歉:(
通过 Hibernate(我知道)实例化对象有 3 种策略。
标准方法
HQL 或标准查询之类的select from cat将创建 POJO(这里是Cat- 或子类的实例),而 Hibernate 将通过调用无参数构造函数来实现。从文档:
所有持久类都必须有一个默认构造函数(可以是非公共的),以便 Hibernate 可以使用 java.lang.reflect.Constructor.newInstance() 实例化它们。建议将此构造函数定义为至少具有包可见性,以便运行时代理生成正常工作。
使用 HQL 选择构造函数
可以引用特定的构造函数以通过 HQL 查询中特制的 select 语句进行调用。
例如select new com.example.Cat(cat.id, cat.name) from Cat作品。如果您的请求定义正确,您还可以使用count()select 中的函数。这将调用一个 2 个参数的构造函数Cat- 尽管我认为这不会自动调整以找到另一个Cat在多态情况下的类。
您可以在文档中探索各种可能性(例如如何构建列表):http : //docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select
使用结果转换器
的概念ResultTransformer允许您在Criteria对象上指定结果将如何转换为对象。使用AliasToBeanConstructorResultTransformer以 ajava.lang.Constructor作为参数的 an ,您可以选择被调用的构造函数。(默认情况下,每个条件都有一个ResultTransformerwhich is RootEntityResultTransformer)。
| 归档时间: |
|
| 查看次数: |
2768 次 |
| 最近记录: |