请帮助我解决这个休眠问题,我是新手来休眠,但仍然试图解决这个问题。我似乎无法解决这个问题。我想我错过了一些非常简单的东西。
我按照此处的示例实现了多对一映射,因为我的要求几乎相同:http://www.coderanch.com/t/217519/ORM/java/Hibernate-Newbie-Many-Relation-Tutorial
请注意,当我尝试保留Picture对象时,用户变量(在该时间点)为空,与其他每个变量条形图一样。
另请注意,我已将hibernate设置为通过hibernate配置文件中的config自行生成数据库模式。
以下是我的映射文件(已删除声明)
User.hbm.xml
<class name="msc.model.User" table="USER">
<id name="id" column="USER_ID">
<generator class="native"/>
</id>
<property name="username"/>
<property name="email"/>
<bag name="pictures"
table="PICTURE"
lazy="true"
cascade="save-update">
<key column="PICTURE_ID"/>
<one-to-many class="msc.model.Picture" />
</bag>
</class>
和Picture.hbm.xml
<class name="msc.model.Picture" table="PICTURE">
<id name="id" column="PICTURE_ID">
<generator class="native"/>
</id>
<property name="story"/>
<property name="tattooist"/>
<property name="pic"/>
<many-to-one name="user"
class="msc.model.User"
column="USER" />
<property name="image" type="blob">
<column name="IMAGE" not-null="true" />
</property>
</class>
类文件(getter和setter剥离)
Picture.java
package msc.model;
import java.io.File;
import java.sql.Blob;
public class Picture {
private Long id = null;
private User user = null;
private File pic = null;
private String story = null;
private String tattooist = null;
private Blob image = null;
}
User.java
package msc.model;
import java.util.ArrayList;
import java.util.List;
public class User {
private Long id = null;
private String username = null;
private String email = null;
private List<Picture> pictures = null;
}
持久性代码(请注意,bFile是从文件创建的字节流):
Session hib_ses = HibernateUtil.getSessionFactory().getCurrentSession();
hib_ses.beginTransaction();
Picture picture = new Picture();
picture.setImage(Hibernate.createBlob(bFile));
Long id = (Long) hib_ses.save(picture);
hib_ses.getTransaction().commit();
以下是例外:
Cannot add or update a child row: a foreign key constraint fails (`msc`.`picture`, CONSTRAINT `FK85BE8DE2885129D` FOREIGN KEY (`PICTURE_ID`) REFERENCES `user` (`USER_ID`))
请帮忙!
答案 0 :(得分:1)
如果这是你得到的真正错误,会发生一些非常奇怪的事情。
Cannot add or update a child row: a foreign key constraint fails (`msc`.`picture`, CONSTRAINT `FK85BE8DE2885129D` FOREIGN KEY (`PICTURE_ID`) REFERENCES `user` (`USER_ID`))
这表示PICTURE.PICTURE_ID是对USER.USER_ID的引用。但PICTURE_ID是图片的PK,Hibernate将在插入时生成。你的意思是从PICTURE.USER创建一个约束到USER.USER_ID?
哦,我看到你写过你通过Hibernate生成模式。我认为错误在你的“包”定义中。键列不应该是PICTURE_ID,而是USER。
答案 1 :(得分:0)
在保存用户之前,您似乎正在尝试保存图片。尝试先保存用户。
<强> [编辑] 强>
从映射 - 看起来用户和图片之间存在父/子关系。
亲子关系的Hibernate Documentation有一个很好的例子。
如果您希望用户能够为空,那么单向关系会更好。
<强> [编辑] 强>
Hibernate的另一个good reference about mapping collections。