Hibernate注释相当于<properties unique =“false”... =“”>?

时间:2015-11-03 17:57:44

标签: java hibernate xdoclet

我正在使用xdoclet将旧应用程序迁移到带有注释的Hibernate 4。我在翻译&#34; hibernate.properties&#34;时遇到了问题。 xdoclet标记(在<properties unique="false".../>;中生成.hbm.xml)到等效注释。 Based on Hibernate's JIRA,看起来在创建Hibernate注释时从未创建@Properties注释,并且仍然在Hibernate 5中作为可能的增强进行仔细研究。

以下是应用程序使用<properties>的方式。属性组的设置如下:

/**
 * @hibernate.class table="ENTITY_A" dynamic-update="true" dynamic-insert="true"
 * @hibernate.properties name="b_plus_c_group" 
 */
public class ClassA {
    private ClassB b;    
    private ClassC c;
    ...

    /** 
     * @hibernate.many-to-one 
     *    column="COL_B"
     *    class="com.acme.ClassB"
     *    cascade="none"
     *    properties-name="b_plus_c_group"
     */
    ClassB getB() {
        return b;
    }

    /** 
     * @hibernate.many-to-one 
     *    column="COL_C"
     *    class="com.acme.ClassC"
     *    cascade="none"
     *    properties-name="b_plus_c_group"
     */
    ClassC getC() {
        return c;
    }
}

&#34; b_plus_c_group&#34;然后在另一个实体中使用b和c表示与ClassA的连接:

/**
 * @hibernate.many-to-one
 *    property-ref="b_plus_c_group"
 *    insert="false"
 *    update="false"
 *    cascade="all"
 *    fetch = "join"
 *    class="com.acme.ClassA"
 * @hibernate.formula value="COL_B"
 * @hibernate.formula value="COL_C"
 */
ClassA getA() {
    return a;
}

在构建Criteria查询时,某些业务逻辑也会引用属性组:

Criteria criteria = session.createCriteria(ClassA.class, "a");
criteria
.createAlias("b_plus_c_group", "bpc")
.createAlias("bpc.b", "b")
.createAlias("bpc.c", "c")
.add(Restrictions.eq("c.keyField", keyForC))
.setProjection(
    Projections.projectionList()
    .add(Projections.property("a.description"))
    .add(Projections.property("b.description")));

(注意:遗憾的是,目前正在生产的基于xdoclet的实现不存在测试环境,因此我无法轻松运行方案来查看这些查询的实际行为。此时我还是取决于人工观察。)

我在这里的用法总结是:我们有一对属性&#34; b&#34;和&#34; c&#34;它们共同形成A的非唯一键(唯一=&#34; false&#34;是默认值)。所以我们给这对属性命名为&#34; b_plus_c_group&#34;并使用它:

  1. 作为来自另一个实体的与A的多对一关系的关键
    • 但是,非唯一的密钥对如何能够可靠地产生多对一所需的单个结果?包含由 COL_B COL_C组成的公式会发挥什么额外作用?
  2. 作为获取组中的字段以表达查询的限制和投影的方法。
    • 但这些可以简单地表达为&#34; a.b&#34;和&#34; a.c&#34;?
  3. 所以我有两个看起来对我不好的用法(但我可能会遗漏一些东西),并且无法将这些用法逐字翻译成注释。

    任何人都可以澄清预期的行为并提供表达注释的方式吗?

0 个答案:

没有答案