Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 比较hql中实体的ID_Java_Hibernate - Fatal编程技术网

Java 比较hql中实体的ID

Java 比较hql中实体的ID,java,hibernate,Java,Hibernate,所以我想比较两个连接的实体的两个ID,如果我给你看一个代码,我想更好的解释是 offerder.java @Data @Entity @Table(name = "offer_order", schema = "srp") @SequenceGenerator(name = "sequence_generator", sequenceName = "srp.offer_order_seq", allocationSize = 1) @EqualsAndHashCode(callSuper = f

所以我想比较两个连接的实体的两个ID,如果我给你看一个代码,我想更好的解释是

offerder.java

@Data
@Entity
@Table(name = "offer_order", schema = "srp")
@SequenceGenerator(name = "sequence_generator", sequenceName = "srp.offer_order_seq", allocationSize = 1)
@EqualsAndHashCode(callSuper = false, exclude = { "offerOrderProjectRel", "associatedOrder" })
@ToString(callSuper = true)
@NoArgsConstructor
public class OfferOrder extends BaseEntity {
[...]

    @OneToMany(mappedBy = "pk.offerOrder")
    private Set<OfferOrderProjectRel> offerOrderProjectRel = new HashSet<OfferOrderProjectRel>();
[..]
}
我必须将这个ID与OfferDerProjectRel的ID进行比较

    @Data
    @Entity
    @Table(name = "offer_order_project_rel", schema = "srp")
    @AssociationOverrides({
            @AssociationOverride(name = "pk.offerOrder",
                    joinColumns = @JoinColumn(name = "offer_order_id")),
            @AssociationOverride(name = "pk.project",
                    joinColumns = @JoinColumn(name = "project_id")) })
    @EqualsAndHashCode(callSuper = false)
    @ToString(callSuper = true)
    @NoArgsConstructor
    public class OfferOrderProjectRel {

        @EmbeddedId
        private OfferOrderProjectRelId pk = new OfferOrderProjectRelId();

        @Transient
        @NotNull
        private OfferOrder offerOrder;

}
已从OfferDerProjectRelid中嵌入ID的

@Embeddable
@EqualsAndHashCode(callSuper = false)
public class OfferOrderProjectRelId implements Serializable {

    @ManyToOne
    private OfferOrder offerOrder;

}
所以,在我向你们展示了重要的东西之后(:p),我正在创建一个冬眠的问题

private static final String SELECT_OOPR_TO_SEND = "SELECT R " +
                                                  "FROM OfferOrderProjectRel R, OfferOrder O, Project P " +
                                                  "WHERE R.project.id = P.id and O.id = R.offerOrder.id " +
                                                  "and O.type = 'ORDER' and (P.status = 'PENDING' or P.status ='PROTECTED')" ;
正如你们所看到的,我正在连接另一个实体,但一旦我通过这个,我将能够做另一个,我想

所以当我启动这个hql时,我犯了那个错误

org.hibernate.QueryException:无法解析以下内容的属性:报价人(或项目): pl.srp.beans.schema.srp.OfferderProjectRel[从中选择R pl.srp.beans.schema.srp.offerderprojectrel R, pl.srp.beans.schema.srp.offerder O,pl.srp.beans.schema.srp.Project 其中R.project.id=P.id和O.id=R.offerder.id和O.type= “订单”和(P.status='PENDING'或P.status='PROTECTED')]


我还尝试了
O=R.offerder
等等。那么我的问题在哪里呢?

您需要
offerder
的公共setter和getter,如果没有getter,就不能调用私有变量

啊,我忘了提到getter和setter是为offerder等自动生成的。我可以通过使用R.pk.offerder获得它。谢谢你的回答;)
private static final String SELECT_OOPR_TO_SEND = "SELECT R " +
                                                  "FROM OfferOrderProjectRel R, OfferOrder O, Project P " +
                                                  "WHERE R.project.id = P.id and O.id = R.offerOrder.id " +
                                                  "and O.type = 'ORDER' and (P.status = 'PENDING' or P.status ='PROTECTED')" ;