我找到了一些有趣的东西
当我像这样运行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
答案 0 :(得分:0)
您的school
映射应使用@JoinColumn
注释(而不是@Column
注释):
@ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name = "SCHOOL_ID") private School school;