【发布时间】: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 在本机查询返回时以某种方式关闭学校字段
是的,Community 和 School 都可能映射到另一个实体,但是为什么会导致这种奇怪的行为呢?我对 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<Student>();?我敢打赌这不是问题。我试过了,但没有用。
标签: spring jakarta-ee jpa orm openjpa