我发现一些有趣的东西
当我像这样运行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;
....
}
[各方中的每个人都有这样的定义(只有出现问题时才提供School实体):
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
更新,我发现一些有趣的事情,当我像从学生那里运行SELECT那样从s.community =:community运行JPQL时,就会发生此问题,但是此查询运行良好,并返回了所有必需的...
您的school
映射应使用@JoinColumn
注释(而不是@Column
注释:]
解决方案有运气吗?尝试通过一组SubjectParts检索主题时遇到相同的事情。