升级到休眠4后未检索到数据

时间:2015-06-24 08:17:22

标签: hibernate jpa

将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;
}

1 个答案:

答案 0 :(得分:3)

您使用temperament标记了nullable=false加入列,这就是Hibernate使用inner join的原因。如果如你所说,数据库中存在null气质的宠物,请尝试删除nullable约束,你应该没问题。