Как мне переписать это отображение hibernate с аннотациями? - PullRequest
1 голос
/ 26 августа 2009

Я бы хотел настроить это сопоставление с аннотациями вместо 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, чтобы решить мою проблему до сих пор.

Этот вопрос не вселяет в меня надежду, но я полагаю, что если он работает в XML, он должен быть применим к аннотациям

Любой совет приветствуется.

1 Ответ

2 голосов
/ 26 августа 2009

Вот ссылка на документацию Hibernate Annotations , которая охватывает большую часть того, что вы хотите. Результирующее отображение будет примерно таким:

@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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...