问答详情
源自:3-9 Hibernate关联映射注解之一对多双向外键关联

@JoinColumn name=cid是什么意思?

//一对多 双向关联
Student.java:
@ManyToOne(cascade = {CascadeType.ALL},fetch = FetchType.EAGER)
@JoinColumn(name = "cid")    ///  ????
 private ClassRoom classRoom;
 
 ClassRoom.java
@Id
@GeneratedValue(generator = "cid")
@GenericGenerator(name = "cid",strategy = "assigned")
@Column(length = 4)
private String cid; 
private String cname; 
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "cid")  ///  ???
private Set<Student> stus;

请问cid指的是什么  ???  这个cid指的是 生成的外键字段的名词 吗? 

有没有要求必须要与主键cid属性同名?如果没有要求的换个其他比较好, 都叫cid这样会有歧义.

还有双向关联双方实体类 @JoinColumn name="xxx"   是都需要写一样吗?

提问者:慕娘9557946 2017-09-13 15:44

个回答

  • MartinCode
    2018-02-24 16:07:24
    已采纳

    @JoinColumn(name="rid", referencedColumnName="cid")     //name=定义外键在本表的字段名 referencedColumnName =关联外键对象的哪个字段


  • 慕娘9557946
    2017-09-13 15:48:29

    提问居然乱码了


    ClassRoom :

       @Id
       @GeneratedValue(generator = "cid")
       @GenericGenerator(name = "cid",strategy = "assigned")
       @Column(length = 4)
       private String cid; 
       private String cname; 

       @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
       @JoinColumn(name = "cid")
       private Set<Student> stus;


    Student :

       @Id
       @GeneratedValue 
       private int sid;

       @Column(length = 25)
       private String sname;
       private String gender;
       private Date birthday;
       private String major;

      @ManyToOne(cascade = {CascadeType.ALL},fetch = FetchType.EAGER)
      @JoinColumn(name = "cid")
       private ClassRoom classRoom;