为什么这个简单的JPA ManyToOne关系不起作用?

时间:2012-05-15 21:51:38

标签: java-ee jpa

我正在使用JPA和Java EE 5(IBM RAD 7.5和WebSphere 7)。我已将问题简化为以下示例...

我有一个项目和一个用户。表格如下所示:

PROJECT
--
id
name
projectmanagerid // is a User

USER
--
id
username

我的课程如下:

@Entity
@Table(name="PROJECT")
class Project
  @Id
  @GeneratedValue(...)
  Long id;
  String name;
  @ManyToOne(fetch=FetchType.EAGER)
  @JoinColumn(name="projectmanagerid");
  User projectManager;

@Entity
@Table(name="USER")
class User
  @Id
  @GeneratedValue(...)
  Long id;
  String username;

要检索我的项目,请执行以下操作:

Query query = em.createQuery("select distinct p from Project p");
query.getResult...

除了project.projectManager总是null之外,一切正常。

FetchType.EAGER不应该导致用户填充?我究竟做错了什么?

非常感谢任何建议!

罗布

2 个答案:

答案 0 :(得分:1)

在这种情况下,您应该只能将其与@Column注释映射为连接列,例如,引用位于关系的另一侧

项目 - > (有)用户然后项目有@Column,名称=“projectmanagerid”

如果另一方有用户引用的项目,那么你会有

用户 - > (有)项目然后项目有@JoinColumn,名字=“projectid”

目前,您正在声明用户表有一个名为projectmanagerid的引用列,但事实并非如此。

我希望这有帮助, TomRed

答案 1 :(得分:0)

看起来我找到了问题的答案所以我会在这里发布。希望它可以帮助别人。

在IBM RAD 7.5中,JPA项目属性有一个名为“Platform”的设置。默认值为“RAD JPA Platform”。当我将其更改为“Generic”时,它现在可以正常工作。

注意:我也按照tomred的建议将@JoinColum更改为@Column,不确定这是否有效,等等。

全部谢谢!

罗布