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;
...
}