Hibernate JPA如何选择没有多个属性的对象

Hibernate JPA如何选择没有多个属性的对象,hibernate,jpa,Hibernate,Jpa,我使用hibernate 3.5.4-final。我有两门JPA课程 @Entity @Table(name = "SPI_V_OP_OBJ_SUBJECT_VR") public class OpSubject_vr extends PersistenceEntity implements Serializable { private static final long serialVersionUID = 1858749317461707015L;

我使用hibernate 3.5.4-final。我有两门JPA课程

    @Entity
    @Table(name = "SPI_V_OP_OBJ_SUBJECT_VR")
    public class OpSubject_vr extends PersistenceEntity implements Serializable {

        private static final long serialVersionUID = 1858749317461707015L;
        /** id */
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "ID",
                nullable = false)
        private Long id;

        /** name */
        @Column(name = "F_NAME")
        private String f_name;


        /** type */
        @Column(name = "SUBJECT_TYPE")
        private String subject_type;


        /** okved */
        @ManyToMany
        @JoinTable(name = "SPI_V_OP_OBJ_SUBJECT_VR_OKVED",
                   joinColumns = {@JoinColumn(name = "OBJECT_ID",
                                              referencedColumnName = "ID",
                                              nullable = false)},
                   inverseJoinColumns = {@JoinColumn(name = "SPR_ID",
                                                     referencedColumnName = "ID",
                                                     nullable = false)})
        private List<OpSprOkved> okved_id_mult = new ArrayList<>();
}
属性okved_id_mult是多个。我想选择属性为空的对象OpSubject\u vr okved\u id\u mult

我试过了

从OpSubject\u vr ent中选择ent,其中okved\u id\u mult为空;休眠错误

从OpSubject\u vr ent中选择ent,其中okved\u id\u mult为空;休眠错误

从OpSubject\u vr ent join ent.okved\u id\u mult i1中选择distinct ent,其中i1.code为空;返回0个对象

查询很好,但您需要将okved_id_mult限定为ent.okved_id_mult。 限制集合属性是非法的。 您需要修改查询以使用左联接。然后,它在逻辑上等价于第一个查询。
请参阅位于

的测试用例使用not in运算符。此查询将检查您的okved_id_mult.id是否未出现在所有现有的OpSprOkved.id中:

 select ent from OpSubject_vr ent where okved_id_mult.id not in
   ( select O.id from OpSprOkved O)

hibernate错误对任何人都没有帮助。第二种形式是非法的。第三种形式根本没有得到你所说的你想要的数据。第一种形式应该是好的。那么给出的错误是什么呢?在第一种形式中,我得到这个错误:由:org.hibernate.hql.ast.QuerySyntaxException引起:okved_id_mult未映射[从ru.spi2.irule.javaee.server.models.rfm.operations.domain.objects.OpSubject_vr ent中选择ent,其中okved_id_mult为空]谢谢!从OpSubject\u vr ent中选择ent,其中ent.okved\u id\u mult为空。工作正常。很高兴它工作正常-同时,我想请您看看Batoo JPA-%100 JPA实现,比Hibernate快15倍…:
 select ent from OpSubject_vr ent where okved_id_mult.id not in
   ( select O.id from OpSprOkved O)