Hibernate JPA如何选择没有多个属性的对象
我使用hibernate 3.5.4-final。我有两门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;
@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)