[英]Hibernate Zero to One unidirectional with reverse primary foreign key cascade
我在Spring Boot中遇到了Hibernate的問題。
我們有2個表, users
和user_info
,具有零對一(因此可以為空的一對一)關系。 user_info
有一個指向users.user_id
的主外鍵:
CREATE TABLE `users` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(45) NOT NULL,
...
PRIMARY KEY (`user_id`)
)
CREATE TABLE `users_info` (
`user_id` bigint(20) NOT NULL,
`name` varchar(45) NOT NULL,
`surname` varchar(45) NOT NULL,
`mail` varchar(45) DEFAULT NULL,
...
PRIMARY KEY (`user_id`),
KEY `fk_user_id_idx` (`user_id`),
CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`)
REFERENCES `users` (`user_id`)
ON DELETE NO ACTION ON UPDATE NO ACTION
)
這些是模型:
@Entity
@Table(name = "users")
public class User implements UserDetails, Buildable<User.Builder> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long id;
private String username;
@Nullable
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="user_id")
@JsonUnwrapped
private UserInfo userInfo;
...
}
@Entity
@Table(name = "users_info")
public class UserInfo {
@Id
@Column(name = "user_id")
private Long id;
@Nullable
private String name;
@Nullable
private String surname;
...
}
當我使用此配置運行Spring應用程序時,它會引發錯誤消息:
org.hibernate.id.IdentifierGenerationException ids for this class must be manually assigned before calling save()
如果User實體中的UserInfo
實例不為null,我們如何級聯持久化UserInfo
實例?
感謝您的回答!
您的映射是向后的。 UserInfo應該引用它所附屬的用戶,並且是該關聯的所有者。 您還應該說它的ID也是用戶的外鍵。
@Entity
@Table(name = "users")
public class User implements UserDetails, Buildable<User.Builder> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long id;
private String username;
@Nullable
@OneToOne(mappedBy="user", cascade = CascadeType.ALL)
@JsonUnwrapped
private UserInfo userInfo;
...
}
@Entity
@Table(name = "users_info")
public class UserInfo {
@Id
@Column(name = "user_id")
private Long id;
@Nullable
private String name;
@Nullable
private String surname;
@OneToOne
@MapsId
private User user;
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.