返回信息流LZ最近在学hibernate框架,然后遇到一开始的实体关系映射,现在遇到一个问题,就是在考虑单向的一对多的映射关系时,会出错。这是一个基本的邮件管理的关系,两张表一张是Person表,内容是id和name;另一张是email表,内容是id和email.两个类分别是:
package dom;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
import dom.*;
public class Person2
{
private Integer id;
private String name;
private List<Email> emails = new ArrayList<Email>();
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public List<Email> getEmails()
{
return emails;
}
public void setEmails(List<Email> emails)
{
this.emails = emails;
}
}
另一个类是:
package dom;
import javax.persistence.*;
public class Email
{
private Integer id;
private String email;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
}
然后对应的hbm.xml分别如下
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-6-23 16:53:51 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="dom.Email" table="EMAIL">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<property name="email" type="java.lang.String">
<column name="EMAIL" />
</property>
</class>
</hibernate-mapping>
和
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-6-23 20:40:14 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="dom.Person2" table="PERSON2">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<list name="emails" inverse="false" table="EMAIL" lazy="true" cascade="all">
<key>
<column name="ID" />
</key>
<list-index></list-index>
<one-to-many class="dom.Email" />
</list>
</class>
</hibernate-mapping>
然后我是用hibernate自带的建表方式来建表的,并且测试代码如下:
package Sun;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import dom.*;
public class TestAnnoationedPersonEmail
{
public static void main(String args[]) throws Exception
{
Person2 person = new Person2();
person.setName("Jane");
Email email = new Email();
email.setEmail("yahoo@yahoo.com.cn");
person.getEmails().add(email);
email = new Email();
email.setEmail("163@163.com");
person.getEmails().add(email);
Configuration config = new Configuration().configure();
SessionFactory sf = config.buildSessionFactory();
Session sess = sf.openSession();
Transaction tx = sess.beginTransaction();
//sess.persist(email);
sess.persist(person);
//sess.save(person);
@SuppressWarnings("unchecked")
List<Person2> list = sess.createQuery("select p from Person2 p left join fetch p.emails e" + " where e.email like '%@yahoo.com.cn'").list();
for(Person2 p :list)
{
System.out.println("Person: " + p.getName());
for(Email e:p.getEmails())
{
System.out.println("\tEmail: " + e.getEmail());
}
}
//sess.delete(person);
tx.commit();
sess.close();
}
}
但是发现运行这个代码就会报错:
具体的错误如下:
严重: Cannot add or update a child row: a foreign key constraint fails (`test`.`email`, CONSTRAINT `FK3F0537C1B8FA7CC` FOREIGN KEY (`ID`) REFERENCES `person2` (`ID`))
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not insert: [dom.Email]。
LZ是这些个框架的小白,望大神们指导,如何改这个错误。
这是一条镜像帖。来源:北邮人论坛 / java / #42033同步于 2015/6/23
Java机器人发帖
关于hibernate的问题
sun111
2015/6/23镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。