Java 如何使用JPA和Hibernate为复合键实体创建@OneToOne Lazy fetch和optional=true关系
我们有两个实体Java 如何使用JPA和Hibernate为复合键实体创建@OneToOne Lazy fetch和optional=true关系,java,hibernate,jpa,spring-data-jpa,one-to-one,Java,Hibernate,Jpa,Spring Data Jpa,One To One,我们有两个实体Student和StudentDetails。如何声明它们之间的@OneToOne关系 @Table(name = "STUDENTS") @Data @IdClass(value = Student.StudentId.class) public class Student implements Serializable { @Id @Column(name = "PARTITIONKEY") private Long partitionKey;
Student
和StudentDetails
。如何声明它们之间的@OneToOne关系
@Table(name = "STUDENTS")
@Data
@IdClass(value = Student.StudentId.class)
public class Student implements Serializable {
@Id
@Column(name = "PARTITIONKEY")
private Long partitionKey;
@Id
@Column(name = "STUDENTKEY")
private Long studentKey;
@Data
@NoArgsConstructor
public static class StudentId implements Serializable {
private Long partitionKey;
private Long studentKey;
}
}
@Table(name = "STUDENTDETAILS")
public class StudentDetails implements Serializable {
@Id
@Column(name = "PARTITIONKEY")
private Long partitionKey;
@Id
@Column(name = "STUDENTKEY")
private Long studentKey;
@Data
@NoArgsConstructor
public static class StudentDetailsId implements Serializable {
private Long partitionKey;
private Long studentKey;
}
}
@OneToOne(mappedBy=“…”)
字段
@MapsId
即可共享自动生成的父标识符
现在,最好使用
@embeddeble
来保存复合标识符,而不是使用多个@Id
注释。@EmbeddedId
将更容易定位实体。否则,您需要使用实体来存储ID,以便从数据库中获取实际实体。它与@embeddedableid
一起工作,也就是说,我在这两个类中都使用了@embeddedableid
,并在StudentDetails
中与@MapsId创建了@OneToOne关系,然后在插入StudentDetails
时,我将Student
作为参数传递。是否可以在学生
班级中创建@OneToOne
关系?这将简化我们的查询,因为Student
和其他实体之间有更多的实体关系,我浏览了你们的博客,发现没有外键的OneToOne惰性初始化是不可能的,除非我们使用字节码增强。我们最终创建了OneToMany关联,并将该关联的getter更改为始终返回集合中的第一个对象。