编程语言
首页 > 编程语言> > java – Null外键,在ManyToOne关系中使用hibernate [4.1.1]注释

java – Null外键,在ManyToOne关系中使用hibernate [4.1.1]注释

作者:互联网

我试图使用Hibernate 4.1.1保持一对多和多对一的关系,但外键始终为NULL.

有两个实体:帐户和客户.客户可以有多个账户,而账户只有一个客户.

这是课程(只有重要的):

Account.java

@Entity
@Table(name = "account")
public class Account implements Serializable {
    private Client client;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public long getId() {
        return id;
    }

    @ManyToOne
    @JoinColumn(name = "id_client")
    public Client getClient() {
        return client;
    }
}

Client.java

@Entity
@Table(name = "client")
public class Client implements Serializable {
    private List<Account> accounts;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public long getId() {
        return id;
    }

    @OneToMany(mappedBy = "client", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    public List<Account> getAccounts() {
        return accounts;
    }
}

Test.java

session.beginTransaction();

Client client = new Client();
Account account1 = new Account();
Account account2 = new Account();

a.addAccount(account1);
a.addAccount(account2);

session.save(client);
session.getTransaction().commit();

在运行时,Hibernate将外键添加到表中:

Hibernate:alter table account添加索引FKB9D38A2D3B988D48(id_client),添加约束FKB9D38A2D3B988D48外键(id_client)引用client(id)

两个帐户都有id_client列NULL.

我尝试在@JoinColumn关系中放置nullable = false,但这只是调用了一个异常.

线程“main”中的异常org.hibernate.exception.ConstraintViolationException:列’id_client’不能为null

解决方法:

弄清楚了.我忘了将客户端添加到帐户中.

account1.setClient(client);
account2.setClient(client);

现在它有效.感谢您的小费.

标签:many-to-one,java,hibernate,foreign-keys,one-to-many
来源: https://codeday.me/bug/20190726/1539499.html