我想知道Hibernate如何使用当前的映射设置执行查询。
代码将在下面。 ConnectionManager类是父对象,我们不需要与父对象分开访问其子对象(即,我们仅使用父对象进行获取和保存)。
在ConnectionManager中,有一个@OneToOne用于emailDetail,documentDetail和sqlDetail。其中只有一个会被填充,其他两个将为null。每个“ x”详细信息还具有一个用于“ x”验证的一对多集合映射。
每个“ findOne(connectionManager id)”或“ findAll()”会为每个查询搜索整个emailDetail,documentDetail和SqlDetail表吗?好像是这样,那将是一个非常低效的查询,因为两个始终为null。我有更好的设置方法吗?
@Entity
public class ConnectionManager {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long controlId;
private int sequence;
public enum ValidationType {Email, Document, Sql};
@Enumerated(EnumType.STRING)
private ValidationType type;
@OneToOne(cascade = {CascadeType.ALL},orphanRemoval = true)
@JoinColumn(name = "emailDetail_id")
private EmailDetail emailDetail;
@OneToOne(cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinColumn(name = "documentDetail_id")
private DocumentDetail documentDetail;
@OneToOne(cascade = {CascadeType.ALL},orphanRemoval = true)
@JoinColumn(name = "sqlDetail_id")
private SqlDetail sqlDetail;
//getters setters
DocumentDetail
@Entity
public class DocumentDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany( cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "documentDetail_id")
private List<DocumentValidation> documentValidationList;
private String location;
public DocumentDetail(){};
DocumentValidation
@Entity
public class DocumentValidation {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String details;
其他人的关系(EmailDetail-> EmailValidation,SqlDetail-> SqlValidaton)几乎相同,只是每个类中的字段不同