Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA规范中允许三表联接中的空集_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java Spring数据JPA规范中允许三表联接中的空集

Java Spring数据JPA规范中允许三表联接中的空集,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我在Spring数据JPA规范中加入了三个表,例如: public static Specification<Contact> findByStructureCode(final String code) { return new Specification<Contact>() { @Override public Predicate toPredicate(Root<Contact> root, CriteriaQu

我在Spring数据JPA
规范中加入了三个表,例如:

public static Specification<Contact> findByStructureCode(final String code) {
    return new Specification<Contact>() {
        @Override
        public Predicate toPredicate(Root<Contact> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
            return criteriaBuilder.equal(root.join(Contact_.contactToStructures)
                    .join(ContactToStructure_.structureCodes)
                    .get(StructureCode_.code), code);
        }
    };
}
注意,我已经用假信息替换了最后一行中的包和jar信息。我的代码中堆栈跟踪引用的行是
.join(ContactToStructure\uu.structureCodes)

我认为这是因为并非所有的
Contact
行在我的数据库中都有相应的
ContactToStructure

那么,如何进行第一次连接,以允许具有空
contactToStructures
集的
contactToStructures
实体,并仅返回具有非空
contactToStructures
集的contacts


以下是实体及其元模型的相关部分

Contact.java

@Entity
@Table(name = "CONTACT", schema = "myschema")
public class Contact {    
    @OneToMany(mappedBy = "contact", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    private Set<ContactToStructure> contactToStructures = new HashSet<>(0);    
}
@StaticMetamodel(Contact.class)
public class Contact_ {
    public static volatile SetAttribute<Contact, ContactToStructure> contactToStructures;
}
@Entity
@Table(name = "CONTACT_TO_STRUCTURE", schema = "myschema")
public class ContactToStructure {
    @OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL}, mappedBy="contactToStructure")
    private Collection<StructureCode> structureCodes = new ArrayList<>();
}
@StaticMetamodel(ContactToStructure.class)
public class ContactToStructure_ {
    public static volatile SetAttribute<ContactToStructure, StructureCode> structureCodes;
}
@Entity
@Table(name = "STRUCTURE_CODE", schema = "myschema")
public class StructureCode {
    @Column(name = "CODE")
    private String code;
}
@StaticMetamodel(StructureCode.class)
public class StructureCode_ {
    public static volatile SingularAttribute<StructureCode, String> code;
}
StructureCode_uu2;.java

@Entity
@Table(name = "CONTACT", schema = "myschema")
public class Contact {    
    @OneToMany(mappedBy = "contact", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    private Set<ContactToStructure> contactToStructures = new HashSet<>(0);    
}
@StaticMetamodel(Contact.class)
public class Contact_ {
    public static volatile SetAttribute<Contact, ContactToStructure> contactToStructures;
}
@Entity
@Table(name = "CONTACT_TO_STRUCTURE", schema = "myschema")
public class ContactToStructure {
    @OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL}, mappedBy="contactToStructure")
    private Collection<StructureCode> structureCodes = new ArrayList<>();
}
@StaticMetamodel(ContactToStructure.class)
public class ContactToStructure_ {
    public static volatile SetAttribute<ContactToStructure, StructureCode> structureCodes;
}
@Entity
@Table(name = "STRUCTURE_CODE", schema = "myschema")
public class StructureCode {
    @Column(name = "CODE")
    private String code;
}
@StaticMetamodel(StructureCode.class)
public class StructureCode_ {
    public static volatile SingularAttribute<StructureCode, String> code;
}
@StaticMetamodel(StructureCode.class)
公共类结构代码{
公共静态属性码;
}
如果仍然相关 尝试进行以下更改
ContactToStructure\uuz.java

public static volatile SetAttribute<Version, UseCase> useCases;
publicstaticvolatilesetattribute用例;
致:

公共静态volatile CollectionAttribute用例;
如果仍然相关 尝试进行以下更改
ContactToStructure\uuz.java

public static volatile SetAttribute<Version, UseCase> useCases;
publicstaticvolatilesetattribute用例;
致:

公共静态volatile CollectionAttribute用例;

这不是你所担心的(事实上,你正在构建的查询应该会产生你想要的行为)。在将任何查询发送到数据库之前很久就会引发异常。我相信您遇到了这个问题:不,我的元模型和它们对应的实体都在同一个包中,并且名称完全相同,只是元模型类名和文件名的末尾有一个下划线。这不是您所担心的(事实上,您正在构建的查询应该会产生您想要的行为). 在将任何查询发送到数据库之前很久就会引发异常。我认为您遇到了这个问题:不,我的元模型与它们对应的实体都在同一个包中,并且名称完全相同,除了元模型类名和文件名末尾包含下划线之外。