2014-11-04 80 views

回答

0

您應該首先了解什麼是休眠模式下的OneToOne映射。 其次,如果我想要設計,那麼我將address_id作爲學生表中的外鍵,而不是學生ID。

因爲你不使用@Table註釋

Student類

@Entity 
public class Student{ 

    @Id 
    @Column("stuid") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @Column("stuName") 
    private String name; 

    //setters and getters 

} 

地址類

@Entity 
    public class Address{ 

    @Id 
    @Column("add_id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @Column("street") 
    private String street; 

    @Column("city") 
    private String city; 

    @OneToOne(cascade={CascadeType.SAVE,CascadeType.MERGE}) 
    @JoinColumn(name="stuid") 
    private Student student 

    //setters and getters 

} 
+0

是的,你是正確的。但有些人已經設計了我的數據庫。他們在地址表中設計了stuid。這是這裏的主要問題 – stackUser44 2014-11-04 11:56:02

+0

所以答案根據它們包含映射 – 2014-11-04 11:57:42

0

假設其指定//表的名字將被視爲學生如果一個Student可以有多個Address個實體,那麼您需要在學生和地址類之間建立關係one-to-many。學生應該知道他們屬於哪個地址,並且因爲您需要將學生ID保存在地址表中,則該關係變爲雙向。

的實體看起來是這樣的:

Student.java

@Entity 
@Table(name = "student_tbl") // Optional, By default table name is student, if you want to give different name then use this line. 
public class Student1 { 

    @Id 
    @GeneratedValue 
    private int stuid; 
    private String stuName; 
    @OneToMany(mappedBy = "student") 
    private List<Address> address = new ArrayList<Address>(); 

    // Setters & Getters 
} 

Address.java

@Entity 
@Table(name = "address_tbl") 
public class Address { 

    @Id 
    @GeneratedValue 
    private int addressId; 
    private String street; 
    private String city; 

    @ManyToOne 
    @JoinColumn(name="stuid") 
    private Student1 student; 
    // Setters & Getters 
}