Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/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
Jpa JPQL NamedQuery:从@ElementCollection引用访问@Embeddeble类的属性_Jpa_Eclipselink_Jpql_Embeddable - Fatal编程技术网

Jpa JPQL NamedQuery:从@ElementCollection引用访问@Embeddeble类的属性

Jpa JPQL NamedQuery:从@ElementCollection引用访问@Embeddeble类的属性,jpa,eclipselink,jpql,embeddable,Jpa,Eclipselink,Jpql,Embeddable,下面的命名查询 <named-query name="fix.getByProblem"> <query> SELECT f FROM Fix f JOIN f.solved s WHERE s.id IN :ids </query> </named-query> Problem.java @Entity(name = Pro

下面的命名查询

 <named-query name="fix.getByProblem">
        <query>
            SELECT f
            FROM Fix f JOIN f.solved s
            WHERE s.id IN :ids
        </query>
    </named-query>
Problem.java

    @Entity(name = Problem.ENTITY_NAME)
    @Access(value = AccessType.FIELD)
    @Table(name = Problem.TABLE_NAME, schema = Problem.SCHEMA_NAME)
    @IdClass(ProblemHandle.class)
    public class Problem {
        public static final String ENTITY_NAME = "problem";
        public static final String SCHEMA_NAME = "X";
        public static final String TABLE_NAME = "PROBLEM";

        @Id
        @Column(name="id", nullable = false)
        private Long id;
...
}
如何在不改变模式(例如使用句柄)的情况下实现这一点?

您有@Access(AccessType.PROPERTY),因此属性的名称来自get方法,而不是变量。get方法的名称是什么

尝试删除@Access(AccessType.PROPERTY)


另外,您使用的是什么版本?尝试使用2.4版本。

ProblemHandle
类中,除了
id
之外,还有其他字段吗?尝试在ProblemHandle中标记@Transient over id FIELD。感谢您的回答。ProblemHandle没有任何其他字段,但有两个私有常量。我尝试了@Transient,但没有任何效果。你的想法是什么?如果你注释掉这一行:
@AttributeOverrides({@AttributeOverride(column=@column(name=“SOLVED\u ID”,nullable=true),name=“ID”)}
那么它就行了。这也不会改变情况:-/我已经尝试删除它,并将其设置为AccessType.FIELD(我认为这是默认设置),但它没有任何效果。getter名为getId(),没有任何进一步的注释。我正在使用EclipseLink 2.3,但不幸的是,我现在无法切换到2.4。我听说在2.4中,对象比较应该是可能的,因此它可能与“WHERE:ids MEMBER OF s”一起工作?
@Embeddable
@Access(AccessType.PROPERTY)
public class ProblemHandle {
    private Long id;
...
}
    @Entity(name = Problem.ENTITY_NAME)
    @Access(value = AccessType.FIELD)
    @Table(name = Problem.TABLE_NAME, schema = Problem.SCHEMA_NAME)
    @IdClass(ProblemHandle.class)
    public class Problem {
        public static final String ENTITY_NAME = "problem";
        public static final String SCHEMA_NAME = "X";
        public static final String TABLE_NAME = "PROBLEM";

        @Id
        @Column(name="id", nullable = false)
        private Long id;
...
}