2012-03-16 26 views
0

在多对一映射哪一列将作为外键:从地址表,该表列用作学生表一对多和ManToOne注释

public class Student { 
    private String studentName; 
    private Address studentAddress; 

public Student(String studentName, Address studentAddress) { 
     this.studentName = studentName; 
     this.studentAddress = studentAddress; 
    } 
@ManyToOne(cascade = CascadeType.ALL) 
    public Address getStudentAddress() { 
     return this.studentAddress; 
    } 

外键和地址类:

public class Address { 

    private long addressId; 
     private String street; 

      @Id 
     @GeneratedValue 
     @Column(name = "ADDRESS_ID") 
     public long getAddressId() { 
      return this.addressId; 
     } 
    @Column(name = "ADDRESS_STREET", nullable = false, length = 250) 
     public String getStreet() { 
      return this.street; 
     } 
    } 

在多对一这是由@JoinColumn和@JoinColumn做

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") }) 
public Set<Phone> getStudentPhoneNumbers() { 
return this.studentPhoneNumbers; 
} 

难道我错过了一些的事情,或者这是正确的,我不明白correclty

+0

什么是你的问题正是主键?你为什么不测试一切是否正常并询问你是否有问题? – 2012-03-16 08:20:01

+0

@JB ...谢谢你的回复.. ..我已经执行它,它工作正常......但我的问题是它是如何工作自动在manyToOne没有任何注释类型JoinColumn或JoinTable ..... – 2012-03-16 08:25:04

回答

0

它的工作原理没有指定JoinColumn或JoinTable因为JPA规范的情况下,定义默认映射这些注释不存在:

2.10.3.2单向多对一关系

以下映射缺省应用:

实体A映射到名为A.表

Ë ntity B映射到名为B.表

表A包含一个外键表B.外键列名 被形成为以下的级联:实体的 关系属性或字段的名称一个; “_”;表B.

的外键列 主键列的名字有相同的类型表 B.