Пожалуйста, помогите мне с этой проблемой гибернации, я новичок в гибернации и все еще пытаюсь разобраться с этим. Я не могу решить эту проблему. Я предполагаю, что упускаю что-то довольно простое.
Я следовал приведенному здесь примеру, чтобы получить сопоставление «многие к одному», поскольку мои требования почти идентичны: http://www.coderanch.com/t/217519/ORM/java/Hibernate-Newbie-Many-Relation-Tutorial
Обратите внимание, что когда я пытаюсь сохранить объект Picture, пользовательская переменная (на тот момент) пуста, как и все остальные переменные изображения.
Также обратите внимание, что я установил hibernate для генерации схемы базы данных самостоятельно через config в файле конфигурации hibernate.
Вот мои файлы сопоставления (объявления удалены)
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>
Файлы классов (геттеры и сеттеры удалены)
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`))
Пожалуйста, помогите!