Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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/3/android/234.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 使用条件创建别名时列索引超出范围_Java_Hibernate_Jpa_Indexing_Hibernate Criteria - Fatal编程技术网

Java 使用条件创建别名时列索引超出范围

Java 使用条件创建别名时列索引超出范围,java,hibernate,jpa,indexing,hibernate-criteria,Java,Hibernate,Jpa,Indexing,Hibernate Criteria,好吧,我有一个奇怪的问题,我无法解决。 我有3个实体,我会写一些我认为重要的东西 @Data @Entity // all @ are in javax @Table(name = "a", schema = "pl") @SequenceGenerator(...) public class A extends BaseEntity { @OneToMany(mappedBy = "pk.a") private Set<ABRel> Bs = new HashSet<

好吧,我有一个奇怪的问题,我无法解决。 我有3个实体,我会写一些我认为重要的东西

@Data
@Entity // all @ are in javax
@Table(name = "a", schema = "pl")
@SequenceGenerator(...)
public class A extends BaseEntity {
 @OneToMany(mappedBy = "pk.a")
    private Set<ABRel> Bs = new HashSet<ABRel>();
}

@Getter
@Setter
@Entity
@Table(name = "a_b_rel", schema = "pl")
public class ABRel implements IEntity {
    @EmbeddedId
    private OfferOrderProjectRelId pk;

    public OfferOrderProjectRel(B b, A a) {
        if (a == null || b == null) {
            throw new IllegalArgumentException("B orA equals null");
        }
        B.addA(this); // this methods just adds ABRel to sets in A and B
        A.addB(this);
        pk = new ABRelId(b, a);
    }
}

@Getter
@Setter
@Embeddable
@EqualsAndHashCode
public class OfferOrderProjectRelId implements Serializable {

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.REFRESH })
    @JoinColumn(name = "b_id")
    private B b;

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.REFRESH })
    @JoinColumn(name = "a_id")
    private A a;

    public ABRelId(B b, A a) {
        setB(b);
        setA(a);
    }
}

@Data
@Entity (it has javax import)
@Table(name = "b", schema = "pl")
@SequenceGenerator(...)
public class B extends BaseEntity {
 @OneToMany(mappedBy = "pk.b")
 private Set<ABRel> As = new HashSet<ABRel>();

@NotBlank
@Length(max = 10000)
@Column(name = "type", length = 10000, nullable = false)
private String type;
}
我想要达到的是得到所有有特定B.类型的abrel,然后我将不得不以某种方式计算它,但这不是我的问题。我必须使用标准,不能使用任何HQL。我还读到,hibernate在创建实体和嵌入实体时存在某种缺陷,所以我不能太过简化,这就是为什么我在使用它时遇到很多麻烦的原因。有什么想法吗?我没有选择了,所以任何帮助都会很好

我差点忘了,我犯了这个错误

org.hibernate.hibernateeexception:未知实体:空 org.hibernate.loader.CriteriaQueryTranslator.getPropertyMappingCriteriaQueryTranslator.java:638 在 org.hibernate.loader.CriteriaQueryTranslator.getTypeCriteriaQueryTranslator.java:587 在 org.hibernate.loader.CriteriaQueryTranslator.getTypeUsingProjectionCriteriaQueryTranslator.java:569 在 org.hibernate.loader.CriteriaQueryTranslator.getTypedValueCriteriaQueryTranslator.java:627 在 org.hibernate.criteria.SimpleExpression.getTypedValuesSimpleExpression.java:100 在 org.hibernate.loader.CriteriaQueryTranslator.getQueryParameterScripteriaQueryTranslator.java:335 在 org.hibernate.criteria.SubqueryExpression.createAndSetInnerQuerySubqueryExpression.java:151 在 org.hibernate.criteria.SubqueryExpression.toSqlStringSubqueryExpression.java:68

更新:

我加了这样的东西

criteria.createAlias("As", "oorel", JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("oorel.pk.b", "order", JoinType.LEFT_OUTER_JOIN, Restrictions.eq("type", "order"));
现在我收到了新的错误,它是用我的母语写的,所以我将尝试将其翻译为postgres和hibernate异常:

列索引超出范围:1,列数:0


对不起,我的英语不好,提前谢谢你。

不幸的是,这是一个尚未修复的休眠错误。出现此错误是因为hibernate无法通过包含复合密钥的实体创建别名

criteria.createAlias("As", "oorel", JoinType.LEFT_OUTER_JOIN);
criteria.createAlias("oorel.pk.b", "order", JoinType.LEFT_OUTER_JOIN, Restrictions.eq("type", "order"));