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

问题描述 投票:1回答:1

更新

我发现一些有趣的东西

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

[各方中的每个人都有这样的定义(只有出现问题时才提供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时,就会发生此问题,但是此查询运行良好,并返回了所有必需的...

spring jakarta-ee jpa orm openjpa
1个回答
0
投票

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


0
投票

解决方案有运气吗?尝试通过一组SubjectParts检索主题时遇到相同的事情。

© www.soinside.com 2019 - 2024. All rights reserved.