2015-11-25 6 views
0

Я начинаю свой первый проект с Hibernate 4.2.21 и сначала с JPA 2.0, я хочу создать отношения OneToMany Unipirectional. Я видел много примеров в версии Hibernate 3, но не так много в 4.2.21. Этот пример работает отлично, но я не знаю, хорошая ли практика, я хочу узнать мнение других членов об этом?Hibernate 4.2, JPA 2.0 Отношения OnetoMany Однонаправленный с аннотациями

Отношения Одна ко многим:

-Parent Шаблон:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinColumn(name = "template_id") 
    private Set<Variable> variables = new LinkedHashSet<Variable>(); 

-Child: Переменная

@Column(name = "template_id", nullable = false) 
Integer templateId; 
+0

Ребенок обычно не должен иметь идентификатор своего родителя. Если необходимо, чтобы ребенок знал своего родителя, тогда вместо этого сделайте его двунаправленной ассоциацией. –

+0

В моем случае нет необходимости, чтобы ребенок знал отца, а затем, чтобы применить хорошую практику, нужно только удалить ссылку у ребенка? – Miofino

+0

Да. Поле templateId не нужно. Также обратите внимание, что хотя вы инициализируете набор с помощью 'new LinkedHashSet()', Hibernate не будет использовать эту реализацию набора и не будет сохранять порядок вставки в любом месте. Поэтому не ожидайте, что переменные в наборе будут в любом конкретном порядке в сущности, загруженной Hibernate. –

ответ

0

Согласно с этим другой Поста.

Hibernate unidirectional one to many association - why is a join table better?

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-association-collections

однонаправленных один ко многим, используя столбец внешнего ключа в принадлежащей сущности не так распространен и на самом деле не рекомендуется. Мы настоятельно рекомендуем использовать таблицу соединений для такого рода ассоциаций (как описано в следующем разделе). Этот вид ассоциации описан через @JoinColumn

@Entity 
public class Customer implements Serializable { 
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinColumn(name="CUST_ID") 
    public Set<Ticket> getTickets() { 
    ... 
} 

@Entity 
public class Ticket implements Serializable { 
    ... //no bidir 
} 

Однонаправленный с соединительной таблице

однонаправленный один ко многим с присоединиться таблица намного предпочтительнее. Эта ассоциация описывается через @JoinTable.

@Entity 
public class Trainer { 
    @OneToMany 
    @JoinTable(
      name="TrainedMonkeys", 
      joinColumns = @JoinColumn(name="trainer_id"), 
      inverseJoinColumns = @JoinColumn(name="monkey_id") 
    ) 
    public Set<Monkey> getTrainedMonkeys() { 
    ... 
} 

@Entity 
public class Monkey { 
    ... //no bidir 
} 

И, наконец, единственный способ реализовать двунаправленный метод ... да или нет?

Смежные вопросы