【问题标题】:JPA Why only this @ManyToOne returns null?JPA 为什么只有这个 @ManyToOne 返回 null?
【发布时间】:2013-12-30 08:29:59
【问题描述】:

更新

我发现了一些有趣的东西

当我像这样运行 JPQL 时

SELECT s FROM STUDENTS s WHERE s.community=:community

然后这个问题发生了,但是这个查询运行良好并返回所有必要的字段

SELECT s FROM STUDENTS s WHERE s.id=:id

意味着如果与其子字段存在内部连接,那么其他字段的值会以某种方式丢失。我得到了本地查询,并且都返回了所有必要的字段值。必须是 openjpa 在本机查询返回时以某种方式关闭学校字段

是的,CommunitySchool 都可能映射到另一个实体,但是为什么会导致这种奇怪的行为呢?我对 OpenJPA 有点生气


我花了几个小时来解决这个奇怪的问题

有一个类包含几个@ManyToOne 关系

public class Student{

// Relationships

@NotNull
@ManyToOne(fetch=FetchType.EAGER)
private Teacher teacher;

@ManyToOne(fetch=FetchType.EAGER)
@Column(name = "SCHOOL_ID")
private School school;

@ManyToOne(fetch=FetchType.EAGER)
private Club club;

@ManyToOne(fetch=FetchType.EAGER)
private Bus bus;
    ....
}

多方中的每一方都有这样的定义(仅给出存在问题的学校实体):

public class School implements Institution{
// Relationships

@OneToMany(mappedBy="school")
private List<Student> students= new ArrayList<Student>();
    ....

}

这里的问题是当我尝试让所有学生达到某个年龄时:

SELECT s FROM STUDENTS s WHERE s.age=:age

我可以清楚地看到所有其他 @ManyToOne 字段的值,只有 school 除外,并且在 Oracle 数据库中,school_id 字段清楚地存储了正确的数据,这些数据映射到 School 表中的正确条目

那么造成这种情况的可能原因是什么?

我正在使用 Spring MVC3 + Openjpa + Roo

【问题讨论】:

  • 为什么不这样 --> @OneToMany(mappedBy="school") private List 学生;
  • @Ashish 谢谢你的意思是离开= new ArrayList&lt;Student&gt;();?我敢打赌这不是问题。我试过了,但没有用。

标签: spring jakarta-ee jpa orm openjpa


【解决方案1】:

您的school 映射应使用<strong>@JoinColumn</strong> 注释(而不是@Column 注释):

@ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name = "SCHOOL_ID") 私立学校;

【讨论】:

  • 谢谢 我也试过了,但没有帮助。实际上,最初我没有使用@Column@JoinColumn,所以没关系,但它仍然返回null。我在想我可能有一些愚蠢的配置导致这个问题,但我得到的只是帖子中的所有内容......叹息......
猜你喜欢
  • 2018-12-10
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多