【问题标题】:Bidirectional OneToMany/ManyToOne mapping in OpenJPA JPQL problemOpenJPA JPQL 问题中的双向 OneToMany/ManyToOne 映射
【发布时间】:2011-06-25 14:10:46
【问题描述】:

我有两个具有双向关系的类:

@Entity
@Access(AccessType.FIELD)
@Table(name="ROOM")
public class Room {
    @Id
    @GeneratedValue
    @Column(name="ROOM_ID_PK", updatable=false, nullable=false)
    private int id;
    @Column(name="NAME", nullable=false, unique=true)
    private String name;
    @OneToMany(mappedBy="room", cascade={CascadeType.ALL})
    private final Set<Wall> walls;
    ...
}

@Entity
@Access(AccessType.FIELD)
@Table(name="WALLS")
public class Wall {
    @Id
    @GeneratedValue
    @Column(name="WALL_ID_PK", updatable=false, nullable=false)
    private int id;
    @Column(name="NAME", nullable=false, unique=true)
    private String name;
    @ManyToOne
    @JoinColumn(name="ROOM_ID_FK", referencedColumnName="ROOM_ID_PK")
    private Room room;
    ...
}

我正在运行 mysql——生成了一组看起来很正常的表:

ROOMS: INT ROOM_ID_PK, VARCHAR NAME
WALLS: INT WALL_ID_PK, VARCHAR NAME, INT ROOM_ID_FK

但是当我执行 JPQL 查询时

SELECT w FROM Wall w, Room r WHERE w MEMBER OF r.walls AND r = :room

我收到一个错误:

PropertyAccessException 1: org.springframework.beans.MethodInvocationException:
Property 'wall' threw exception; nested exception is <openjpa-2.0.1-r422266:989424
nonfatal user error> org.apache.openjpa.persistence.ArgumentException:An error occurred
while parsing the query filter "SELECT w FROM Wall w, Room r WHERE w MEMBER OF r.walls
AND r = :room". Error message: No field named "walls" in "Room". Did you mean "name"?
Expected one of the available field names in "mypackage.Room": "[id, name]".

由于某种原因,“墙”没有被视为 Room 类的一个字段。这段代码在休眠状态下工作——我正在尝试迁移到 OpenJPA,但遇到了这个错误。我已经确认这两个类都在我的 persistence.xml 中定义。

【问题讨论】:

    标签: java jpa persistence openjpa


    【解决方案1】:

    我不是 100% 确定这是否是原因,但是让 walls 变量 final 对我来说看起来很奇怪。

    所以删除final 标记,然后再试一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 2020-06-26
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2015-02-13
      • 1970-01-01
      相关资源
      最近更新 更多