Java Hibernate使用多对一关联生成额外的左联接
我在两个实体之间有一个简单的HibernateJava Hibernate使用多对一关联生成额外的左联接,java,hibernate,jpa,Java,Hibernate,Jpa,我在两个实体之间有一个简单的Hibernate@manytone映射,通过注释@JoinTable使用一个关联表。 以下是我的映射: @Entity public class Customer { private Long id; private Address address; @Id @GeneratedValue public Long getId() { return id; } @ManyToOne
@manytone
映射,通过注释@JoinTable
使用一个关联表。
以下是我的映射:
@Entity
public class Customer {
private Long id;
private Address address;
@Id
@GeneratedValue
public Long getId() {
return id;
}
@ManyToOne
@JoinTable(
name = "customer_address_association",
joinColumns = @JoinColumn(name = "customer_id"),
inverseJoinColumns = @JoinColumn(name = "address_id")
)
public Address getAddress() {
return address;
}
public void setId(Long id) {
this.id = id;
}
public void setAddress(Address address) {
this.address = address;
}
}
及
当我查询客户实体时,我总是得到一个额外的左联接到联接表。例如,HQL查询(如SELECT c.id from Customer c
)生成以下SQL查询:SELECT customer0\u.id as col\u 0\u 0\u从Customer customer0\uu左外部联接Customer\u address\u association customer0\u 1\u在customer0\u.id=customer0\u 1\u.Customer\u id
此处提供了要复制的完整源代码:
我用Hibernate 5.1、5.2和5.3复制它。是否有任何方法可以防止Hibernate生成到
客户地址\u关联的左联接
表?它会影响大型表的性能。如果没有左联接,它如何知道客户是否有地址(从而知道地址是否必须为null)?使用联接列而不是联接表,将不再有任何左联接。谢谢,当我加载完整的客户实体时是有意义的,但是当我没有加载完整的实体时,我惊讶地看到左联接,例如从客户c选择c.id
哦,是的,错过了。您应该将问题报告给HibernateJust创建它:。谢谢你的帮助!
@Entity
public class Address {
private Long id;
private String street;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public String getStreet() {
return street;
}
public void setId(Long id) {
this.id = id;
}
public void setStreet(String street) {
this.street = street;
}
}