Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 空外键,在使用hibernate[4.1.1]注释的多通关系中_Java_Hibernate_Foreign Keys_One To Many_Many To One - Fatal编程技术网

Java 空外键,在使用hibernate[4.1.1]注释的多通关系中

Java 空外键,在使用hibernate[4.1.1]注释的多通关系中,java,hibernate,foreign-keys,one-to-many,many-to-one,Java,Hibernate,Foreign Keys,One To Many,Many To One,我试图使用Hibernate 4.1.1来保持一对多和多对一的关系,但是外键总是空的 有两个实体:账户和客户。一个客户机可以有多个帐户,而一个帐户只有一个客户机 以下是课程(仅重要内容): Account.java @Entity @Table(name = "account") public class Account implements Serializable { private Client client; @Id @GeneratedValue(strate

我试图使用Hibernate 4.1.1来保持一对多和多对一的关系,但是外键总是空的

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

以下是课程(仅重要内容):

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;
    }
}
@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;
    }
}
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();
Client.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;
    }
}
@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;
    }
}
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表帐户添加索引FKB9D38A2D3B988D48(id_客户端),添加约束FKB9D38A2D3B988D48外键(id_客户端)引用客户端(id)

两个帐户的id_客户端列均为空

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


线程“main”org.hibernate.Exception.ConstraintViolationException:列“id\u client”不能为空

我认为问题在于您需要先保存帐户,然后在最后一个客户端保存。

解决了这个问题。我忘了将客户添加到帐户中

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

现在它起作用了。谢谢你的提示

尝试在关系的帐户端添加@NotNull注释四个小时后发现我需要这样做。谢谢,你真的救了我的命。。。我想我的头撞到墙上了,我想这是自动完成的,它修复了“id\u client”列不能为空