hibernate注解在一对多,一方控制多方怎么修改

开源中国合格公民 发布于 2015/09/18 21:08
阅读 1K+
收藏 0

这是一的一方,是房屋类

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "house")

public Set<HousePicture> getHousePictures()
{
return this.housePictures;

}

这是多的一方,是房屋图片,

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "houseId")
public House getHouse()
{
return this.house;
}
需求是想通过增加房屋,把图片也直接增加到图片表

java代码:

Set<HousePicture> imgs=new HashSet<HousePicture>();
HousePicture pic=new HousePicture();
pic.setPicName(imgFileName);
pic.setUrl(imgPath);
imgs.add(pic);
house.setHousePictures(imgs);
这样增加不能把图片表的外键为空!该怎么设置才可以

加载中
0
zheng_pat
zheng_pat

没有把hibernate注解研究的很透彻 ,建议楼主可以自己百度下hibernate 级联保存的操作方式。我说下我们项目是怎么实现的吧。

首先我们使用的是mybtais,主键由主键生成其生成的。我们首先生成house和houseImage的主键。这样提前生成是不是就解决你的问题了。

另外我大概猜测下楼主的问题是2个实体的ID都不是程序中控制的,而是自动生成的。这涉及到hibernate实体对象的状态了。理论上save一个对象没提交的时候,ID也是有的。也就是你试着去保存图片实体,将图片的house对象设置上,反向保存下

zheng_pat
zheng_pat
自己生产的ID本身没什么问题,但是在分布式文件系统的话数据库主键会冲突,但这个不是主要的问题,我的意思是你可以先保存房屋,保存完成之后实体上的主键就带上值了,再把这个值赋值给图片实体。done!
coder4j
coder4j
回复 @路人丁语 : 看你是否需要用这个id,重要的话一般id还是要自己生成的好,自增的主键会有长度限制,感觉不是很合理。
开源中国合格公民
开源中国合格公民
你说的对,我的实体主键是由mysql数据库自动增加的,这样有什么弊端吗?
0
ahdkk
ahdkk
多方的JoinColumn少配置了 referencedColumnName,  同时你的多方主键的配置了生成策略注解了吗?
ahdkk
ahdkk
自增的注解也是要配置到实体类的
开源中国合格公民
开源中国合格公民
多方主键是mysql数据库自增的
返回顶部
顶部