将Hibernate3升级为hibernate 4.3.8和JPA 2.0升级到JPA 2.1后,如果宠物的气质为空(使用延迟加载),则不会检索宠物列表。 有人可以帮我解决这个问题吗?
我试过的是我不想尝试什么...通过@OneToOne替换joincolumn annontation(mappedBy =" pet")但是还有一些其他映射错误。
气质与PetTemperament具有外键关系
使用Hibernate 4和JPA 2.1触发的查询是
select *
from OwnerPet ownerpets0
inner join Pet petmodel1 on ownerpets0.petId=petmodel1.id
inner join PetTemperament pettempera3 on petmodel1.temperament=pettempera3.id
where ownerpets0.ownerId=144
使用Hibernate 3和JPA 2.0的查询
Select * from OwnerPet ownerpets0
inner join Pet petmodel1 on ownerpets0.petId=petmodel1.id
left outer join PetTemperament pettempera3 on petmodel1.temperament=pettempera3.id
where ownerpets0.ownerId=144
Pet使用
加入PetTemperament@Id
@GeneratedValue
@Column
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column
public Integer getTemperament() {
return temperament;
}
public void setTemperament(Integer temperament) {
this.temperament = temperament;
}
@ManyToOne()
@LazyCollection(LazyCollectionOption.FALSE)
@JoinColumn(name="temperament", insertable=false, updatable=false, nullable=false)
@NotFound(action = NotFoundAction.IGNORE)
public PetTemperamentModel getPetTemperament() {
return petTemperament;
}
public void setPetTemperament(PetTemperamentModel petTemperament) {
this.petTemperament = petTemperament;
}
答案 0 :(得分:3)
您使用temperament
标记了nullable=false
加入列,这就是Hibernate使用inner join
的原因。如果如你所说,数据库中存在null
气质的宠物,请尝试删除nullable
约束,你应该没问题。