Hibernate没有设置外键

时间:2016-10-03 08:30:38

标签: java mysql hibernate

我试图通过这个简单的例子来学习Hibernate,但是我对外键的问题仍然存在,而且#34; null"在数据库中。

@Entity
@Table(name = "tb1")
public class Track {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name="id_tb1", unique= true)
    private int id_tb1;
    @Column(name = "title")
    private String title;
    @ManyToOne
    @JoinColumn(name="id_tb2")
    private tb2 cd;

这是第二类

@Entity
@Table(name = "tb2")
public class CD {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name="id_tb2", unique = true)
    private int id_tb2;
    @Column(name="title")
    private String title;
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL,mappedBy = "cd")
    private List<tb1> tracks = new ArrayList<tb1>();

我这样保存:

SessionFactory factory = new Configuration().configure("/resources/hibernate.cfg.xml").buildSessionFactory();
                Session session1 = factory.openSession();
                session1.beginTransaction();
                session1.save(tb2);
                session1.getTransaction().commit();

但是当Isavethe id_tb2(在表tb1中)没有设置并且它仍然为空。我错过了什么?

2 个答案:

答案 0 :(得分:2)

您需要为双向关系设置双方的关系。

因此,您必须为CDTrack对象设置关系,然后将其保留/合并。

如果没有看到很多代码,就必须执行类似的操作。

cd.getTracks().add(track);
track.setCD(cd);
session1.save(track);
session1.save(cd);

有关详细信息,请参阅another question

答案 1 :(得分:1)

我认为你的表2的类型

private tb2 cd;

应更改为

private CD cd;