JPA为什么只有这个@ManyToOne返回null?

时间:2013-12-12 04:07:23

标签: spring java-ee jpa orm openjpa

更新

我找到了一些有趣的东西

当我像这样运行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

1 个答案:

答案 0 :(得分:0)

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

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