【发布时间】:2021-10-25 23:51:38
【问题描述】:
我有一个 UserInfo 和 AddressInfo 实体类,它们有一对一的关联。 UserInfo 使用序列添加主键,但出现以下错误;
org.hibernate.id.IdentifierGenerationException: 试图从空的一对一属性分配 id
用户信息实体
@Entity
@Table(name = "userinfo")
public class UserInfo {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userid_seq")
@SequenceGenerator(name="userid_seq", allocationSize=1)
private Long userId;
private String firstName;
private String lastName;
private String email;
private String username;
private String password;
@OneToOne(mappedBy = "userInfo", cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private AddressInfo addressInfo;
//Getters - Setters
}
地址信息实体
@Entity
@Table(name = "addressinfo")
public class AddressInfo {
@Id
private Long addressId;
private String homeAddress;
private String homeCity;
private String homeState;
private String homeZip;
@OneToOne
@MapsId
@JoinColumn(name = "address_id")
private UserInfo userInfo;
//Getters - Setters
}
用户信息表
CREATE TABLE userinfo (
user_id INTEGER NOT NULL DEFAULT nextval('userid_seq') PRIMARY KEY ,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL
);
地址信息表
CREATE TABLE addressinfo (
address_id INTEGER NOT NULL PRIMARY KEY,
home_address VARCHAR(100) NULL,
home_city VARCHAR(100) NULL,
home_state VARCHAR(100) NULL,
home_zip VARCHAR(100) NULL,
CONSTRAINT fk_addinfo
FOREIGN KEY(address_id)
REFERENCES userinfo(user_id)
);
我认为我的序列有一些问题,但我可以看到,如果我删除子实体,那么它会成功插入到 UserInfo 表中,但是当我添加 OneToOne 映射时出现上述错误。好像我的主键有问题。我看到类似的问题,但我找不到这里发生了什么。非常感谢您的帮助。
【问题讨论】:
标签: spring postgresql spring-boot spring-data-jpa