【问题标题】:Hibernate Mapping when foreign key placed in reference class外键放置在参考类中时的休眠映射
【发布时间】:2014-11-04 11:23:48
【问题描述】:

我有两个课程StudentAddress

Student{
 stuid,
 stuName,
}

Address{
 street,
 city,
 stuid;//foriegn key Ref with Studnet
}

谁能帮我用hibernate映射这两个类??

【问题讨论】:

    标签: java hibernate relationship one-to-one


    【解决方案1】:

    你应该先了解什么是休眠中的 OneToOne 映射。 其次,如果我想设计,那么我会将 address_id 作为学生表中的外键,而不是学生 ID。

    //表格名称将被视为学生,因为您没有使用@Table注释指定它

    学生班

    @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
    
    }
    

    【讨论】:

    • 是的,你是对的。但是有人已经设计了我的数据库。他们在地址表中设计了 stuid。这是这里的主要问题
    • 所以答案包含根据他们的映射
    【解决方案2】:

    假设如果 Student 可以有多个 Address 实体,那么您需要在 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
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2011-07-26
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      相关资源
      最近更新 更多