Java Hibernate使用多对一关联生成额外的左联接

Java 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

我在两个实体之间有一个简单的Hibernate
@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;
    }
}