Java 具有多个manytone联接的查询

Java 具有多个manytone联接的查询,java,hibernate,querydsl,Java,Hibernate,Querydsl,我有一个包含以下类的模型: public class Organization { private Person person; } public class PersonAddress { private Person person; private Address address; } public class Address { ... } 人和地址、人和人物地址、地址和人物地址之间没有直接的联系。PersonalAddress是Per

我有一个包含以下类的模型:

public class Organization  {

    private Person person;

}

public class PersonAddress  {

    private Person person;
    private Address address;

}

public class Address {

    ...

}
人和地址、人和人物地址、地址和人物地址之间没有直接的联系。PersonalAddress是Person和Address之间的多个关联,但是我们试图避免映射相应的集合,因为它们的滥用可能会导致一些性能问题

我试图创建一个querydsl方法,将组织作为参数传递,并获得组织、人员和地址数据的预测结果,但到目前为止,我最好的尝试是给我一个带有交叉联接的查询

我能否以避免交叉连接的方式构建此查询?同时避免创建集合关联

以下是querydsl查询和生成的SQL:

QueryDSL:

QOrganization organization = QOrganization.organization;
QPerson person = QPerson.person;
QPerson personOrganization = new QPerson("personOrganization");
QAddressPerson addressPerson = QAddressPerson.addressPerson;
QAddress address = QAddress.address;
QCity city = QCity.city;
JPQLQuery<Organization> query = newQuery().from(addressPerson,organization)
    .join(organization.person, person)//
    .join(addressPerson.address, address)//
    .join(address.city, city)//
    .leftJoin(addressPerson.person, personOrganization);
    BooleanBuilder builder = new BooleanBuilder();
    builder.and(organization.eq(organizationParam));
    query.where(builder)//
        .select(create(organization.id, organization.type, //
            QPerson.create(person.id, person.type, //
            QAddressPerson.create(addressPerson.id, //
            QAddress.create(address.id, //
            QCity.create(city.id, city.name), address.zipcode)))));

此部件导致交叉连接

newQuery().from(addressPerson,organization)

您需要将
地址人
组织
移动到内部联接或左侧联接。

此部分导致交叉联接

newQuery().from(addressPerson,organization)
您需要将
addressPerson
organization
移动到内部联接或左联接