Hibernate 4.2,JPA 2.0关系OnetoMany Unidirectional with Annotation

时间:2015-11-25 07:39:36

标签: java oracle hibernate jpa jpa-2.0

我用Hibernate 4.2.21开始我的第一个项目,首先用JPA 2.0开始,我想创建一个关系OneToMany Unidirectional。我在Hibernate 3的版本中看到了很多例子但在4.2.21中并不多。这个例子很完美,但我不知道这是一个好习惯,我想知道其他成员的意见吗?

一对一的关系:

- 父亲模板:

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

-Child:Variable

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

1 个答案:

答案 0 :(得分: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
} 

最后,它是实现双向方法的唯一方式......是或否?