首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPQL NamedQuery:@ElementCollection引用中@Embeddable类的访问属性

JPQL NamedQuery:@ElementCollection引用中@Embeddable类的访问属性
EN

Stack Overflow用户
提问于 2012-08-26 16:14:23
回答 1查看 1.7K关注 0票数 0

折叠命名查询

代码语言:javascript
复制
 <named-query name="fix.getByProblem">
        <query>
            SELECT f
            FROM Fix f JOIN f.solved s
            WHERE s.id IN :ids
        </query>
    </named-query>

应该返回所有解决至少一个给定问题但错误消息失败的修补程序。

异常描述:编译查询fix.getByProblem时出错: 从Fix中选择f加入f.solved s,其中s.id IN :id ],类ProblemHandle的未知状态或关联字段id。

模型如下:(简化)

Fix.java

代码语言:javascript
复制
@ElementCollection
@CollectionTable(name = "FIX_SOLVED", schema = SCHEMA_NAME, joinColumns = {@JoinColumn(name = "SOURCE_VERSION", referencedColumnName = "version")})
@AttributeOverrides({ @AttributeOverride(column = @Column(name = "SOLVED_ID", nullable = true), name = "id") })
private Collection<ProblemHandle> solved;

ProblemHandle.java

代码语言:javascript
复制
@Embeddable
@Access(AccessType.PROPERTY)
public class ProblemHandle {
    private Long id;
...
}

Problem.java

代码语言:javascript
复制
    @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;
...
}

我如何才能做到这一点,而不必改变模式,例如使用句柄?

EN

回答 1

Stack Overflow用户

发布于 2012-08-27 14:53:25

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

尝试删除@Access(AccessType.PROPERTY)

还有,你用的是什么版本?尝试使用2.4版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12131697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档