代码之家  ›  专栏  ›  技术社区  ›  Kevin

如何用注释重写这个休眠映射?

  •  1
  • Kevin  · 技术社区  · 15 年前

    我想用注释而不是XML来配置这个映射。

    以下是映射配置(针对公共消费进行净化):

    <hibernate-mapping package="com.test.model">
      <class name="Parent" table="parent">
    
        <composite-id name="id" class="ParentCompositeKey">
            <key-property name="first_id" type="long" column="first_id"/>
            <key-property name="second_id" type="long" column="second_id"/>
        </composite-id>     
    
        <set name="parentChildren" table="parent_child" inverse="true" cascade="all">
            <key on-delete="cascade">
                <column name="first_id"/>
                <column name="second_id"/>
            </key>
            <one-to-many class="Child" />
        </set>
    
      </class>
    </hibernate-mapping>
    

    Parent 有一个由两个 Long S. Child 具有由父级的复合主键和附加主键组成的复合主键 . 当我删除一个 起源 ,其目的还在于移除 孩子 记录。(显然,这些孩子就是不能自食其力。)

    这是一种单向关系。上 孩子 旁白,我不需要知道 起源 .

    我对JPA注释有点入门。我查过医生,尝试了 @OneToMany @JoinTable 具有 @JoinColumns 到目前为止解决我的问题。

    这个 question 这并没有让我充满希望,但我认为如果它在XML中工作,那么它应该可以通过注释实现。

    谢谢你的建议。

    1 回复  |  直到 15 年前
        1
  •  2
  •   ChssPly76    15 年前

    这里有一个链接指向 Hibernate Annotations documentation 这涵盖了你想要的大部分。结果映射将是沿着以下几条线的:

    @Embeddable
    public class ParentCompositeKey implements Serializable {
    
      public long getFirstId() { ... }
    
      public long getSecondId() { ... }
    
      // setters
    }
    
    @Entity
    public class Parent implements Serializable {
    
      @Id
      public ParentCompositeKey getId() { ... }
    
      @OneToMany(cascade=CascadeType.ALL)
      @JoinColumns ({
            @JoinColumn(name="first_id"),
            @JoinColumn(name="second_id")
        })
      public List getParentChildren() { ... }
    
      // setters 
    }
    

    这假设您没有联接表(从您的命名方案来看,是否这样做有点不清楚)。如果你这样做了,你只需要添加一个 @JoinTable 注释和移动 @JoinColumns 在它里面。