我有两个实体。他们具有OneToOne映射。我想在JPA的单个数据库调用中获取一个实体的所有行及其关联的详细信息。
我尝试加载EAGER。但是它在一次调用中获取了所有书行,然后一个一个地获取book_additional_details。我想在单个数据库中获取所有行及其关联的表行(例如,通过使用带有联接的sql查询)。
@Entity
@Table("book")
public class Book{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
Long id;
@Column("name")
private String name;
@OneToOne(fetch = FetchType.EAGER, mappedBy = "book", cascade = CascadeType.PERSIST)
@JsonManagedReference
private BookAdditionalDetail bookAdditionalDetail;
}
@Entity
@Table(name = "book_additional_detail")
public class BookAdditionalDetail{
@Id
Long id;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id")
@MapsId
@JsonBackReference
private Book book;
@column("author_name")
private String authorName;
}
bookRepo.findAll()
bookRepo.findAll()将在一个sql调用中获取所有书行,然后一对一触发sql查询以获取book_additional_details。 我希望bookRepo.findAll()在单个sql调用中获取所有这些详细信息。最好有一个不使用本机查询的解决方案(最好是通过管理注释来解决)。