【问题标题】:Many to one search query多对一搜索查询
【发布时间】:2013-06-27 11:27:32
【问题描述】:

我在 JPA 中面临一个关于多对一关系的问题。我现在遇到的问题是使用where子句获取数据。

Skills类:

    @Id
    private long skillsID;
    @Basic
    private String longDescription;
    @Basic
    private String shortDescription;
    @Basic
    private String colOrder;
    @Basic
    private String isActive;
    @Basic
    private String changeDate;
    @ManyToOne(fetch=FetchType.EAGER)
    private Category category;

第二个实体是:

Category类:

    @Id
    private long categoryID;
    @Basic
    private String name;
    @Basic
    private String colOrder;
    @Basic
    private String isActive;
    @Basic
    private String changedDate;
    @OneToMany(mappedBy = "category")
    private Collection<Skills> skills;

所以在 JPA 中,当我执行以下代码时,它会抛出如下异常:

java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 

Exception Description: Problem compiling [SELECT s.longDescription  from Skills s, Category c  where s.categoryID =  c.categoryID]. 

[57, 69] The state field path 's.categoryID' cannot be resolved to a valid type.

JPA 代码是:

Query q = em .createQuery("SELECT s.longDescription  from Skills s, Category c "+
"where s.categoryID =  c.categoryID");

那么,如何根据外键从SkillsCategory 获取数据?

【问题讨论】:

  • 没有必要对我们大喊大叫。

标签: java jakarta-ee jpa persistence many-to-one


【解决方案1】:

Skills 实体中没有字段categoryID

只需在Query 中使用它的category 字段:

Query q = em .createQuery("SELECT s.longDescription from Skills s, Category c " +
                          "WHERE s.category =  c");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多