Hibernate处理set集合时,为什么不能向数据库写入数据

pjx 发布于 2015/04/27 16:26
阅读 446
收藏 0

为什么数据库不能被添加数据 [问题点数:40分]

为什么数据库不能被添加数据 [问题点数:40分]


Pengjx2014 Pengjx2014 本版等级:T1
结帖率:0%
楼主 发表于: 2015-04-27 16:23:29
package collection;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import domain.UserSet;

public class SetTest {

public static void main(String[] args) {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();

UserSet user1 = new UserSet();
user1.setName("pjx");
Set emails1 = new HashSet();
emails1.add("email1");
emails1.add("email2");
user1.setEmails(emails1);

UserSet user2 = new UserSet();
Set emails2 = new HashSet();
emails2.add("email3");
user2.setEmails(emails2);
int id=0;// 定义主键变量

Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
id = (Integer) session.save(user1);
session.save(user2);
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}

// 修改数据
session = sessionFactory.openSession();
tx = null;
try {
tx = session.beginTransaction();
user1 = (UserSet) session.get(UserSet.class, id);
// 修改user名字
user1.setName("user1 update");
user1.getEmails().remove("email1");
user1.getEmails().add("mail4");
session.update(user1);
tx.commit();
} catch (RuntimeException e) {
if (tx != null)
tx.rollback();
throw e;
} finally {
session.close();
}
}
}

package domain;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class UserSet implements Serializable {
private int id;
private String name;
private Set emails = new HashSet();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getEmails() {
return emails;
}
public void setEmails(Set emails) {
this.emails = emails;
}


}

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 一个session-factory只能连接一个数据库 -->
<session-factory>
<!-- 数据库的用户名 -->
<property name="connection.username">root</property>
<!-- 密码 -->
<property name="connection.password">123123</property>
<!-- url -->
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate
</property>
<!-- 作用:根据持久化类和映射文件生成表 validate create-drop create update -->
<property name="hbm2ddl.auto">update</property>
<!-- 显示hibernate内部生成的sql语句 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 配置二级缓存 -->
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="show_sql">true</property>
<!-- 数据库表Java对象映射文件表 -->
<mapping resource="domain/Person.hbm.xml"/>
<mapping resource="domain/Box.hbm.xml"/>
<mapping resource="domain/UserSet.hbm.xml"/>

</session-factory>
</hibernate-configuration>
数据库脚本如下
CREATE TABLE'email_set'(
’id'int(11)NOT NULL ,
’address'varchar(100)NOT NULL,
PRIMARY KEY(’id')
)ENGINE=InnoDB DEFAULT CHARSET=gbk
CREATE TABLE'user_set'(
’id'int(11)NOT NULL auto_increment,
’name'varchar(100)NOT NULL default'’,
PRIMARY KEY(’id')
)ENGINE=InnoDB DEFAULT CHARSET=gbk
加载中
返回顶部
顶部