如何用注释重写这个hibernate-mapping?

时间:2009-08-26 01:16:24

标签: hibernate jpa annotations

我想使用注释而不是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组成的复合主键。 Child有一个复合主键,由父级的复合主键和另外的Long组成。当我删除Parent时,目的是删除相关的Child记录。 (显然,这些孩子无法自生自灭。)

这是一种单向关系。在Child方面,我无需查找Parent

我是JPA注释的初学者。我查看了文档并尝试了@OneToMany@JoinTable@JoinColumns的各种组合来解决我的问题。

这个question并没有给我带来希望,但我认为如果它在XML中有效,它应该可以用注释来实现。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

这是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