2014-11-04 33 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 
}