我想创建两个表 USER 和 USERDETAIL 来完成:
USERDETAIL 引用了 USER 表。
对 USER 表的操作不需要知道 USERDEAIL 表的存在。
这应该是一对一的非双向关系。
实体类:
@Entity
@Table(name="USER")
public class User implements Serializable{
@Id
@Column(name="ID")
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
//...
}
@Entity
@Table(name="USERDETAIL")
public class UserDetail implements Serializable{
@Id
@Column(name="ID")
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign",
parameters = @Parameter(name = "property", value = "user"))
private String id;
@OneToOne(optional= false , targetEntity=User.class, cascade= CascadeType.ALL)
@OnDelete(action = OnDeleteAction.CASCADE)
//@JoinColumn(name="foreign_id",referencedColumnName="ID")
@PrimaryKeyJoinColumn
private User user;
//...
}
这将正确创建两个表,并且 USERDETAIL 具有外键约束,即其主键由 USER 的 id 引用。但是,删除操作是Restrict
但不是Cascade
。因此,我无法删除一行 USER。
我正在使用 MySQL 服务器 5.1。似乎它不支持级联删除操作。因为我可以手动删除约束并添加一个设置为 on delete 的新约束是级联的,并且可以按预期工作。