Hibernate Composite-element映射的一个简单例子(二)

2014-11-24 11:14:51 · 作者: · 浏览: 3
Exception in thread "main"org.hibernate.PropertyNotFoundException: Could not find a setter for property team in classcollect.composite_element.Member
若同时去掉映射文件中的子元素,则一切与原来一样。这也说明了JVM要通过xml文件解析编译类文件。子元素只是起说明作用,对于此例因为没有用到get/setTeam(),故可省略掉。
将该映射文件加入到Hibernate配置文件中,建立一个测试类Test.java:
[java]
package collect.composite_element;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import collect.map.UserMap;
public class Test {
public static void main(String[] args) {
// Configuration管理Hibernate配置
Configuration config = new Configuration().configure();
// 根据Configuration建立 SessionFactory
// SessionFactory用来建立Session
SessionFactory sessionFactory = config.buildSessionFactory();
// 创建实例
Team t=new Team();
t.setName("team1");
Member m1=new Member();
m1.setName("m1");
m1.setAge("33");
Member m2=new Member();
m2.setName("m2");
m2.setAge("22");
t.getMemebers().put("程序员", m1);
t.getMemebers().put("测试工程师", m2);
// 定义主键变量
Integer pid;
// 添加数据
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
// 创建主键变量
pid = (Integer) session.save(t);
tx.commit();
} catch (RuntimeException e) {
if (tx != null)
tx.rollback();
throw e;
} finally {
session.close();
}
// 修改数据
Member m3=new Member();
m3.setName("增加人员");
m3.setAge("33");
session = sessionFactory.openSession();
tx = null;
try {
tx = session.beginTransaction();
t = (Team) session.get(Team.class, pid);
// 修改名字
t.setName("team update");
t.getMemebers().put("项目经理", m3);
t.getMemebers().remove("测试工程师");
session.update(t);
tx.commit();
} catch (RuntimeException e) {
if (tx != null)
tx.rollback();
throw e;
} finally {
session.close();
}
// 查询数据
session = sessionFactory.openSession();
t = (Team) session.get(Team.class, pid);
System.out.println("team name:" + t.getName());
System.out.println("member name:" + t.getMemebers());
session.close();
// 关闭sessionFactory
sessionFactory.close();
}
}
运行结果:
控制台:
13:38:45,751 DEBUG SQL:346 -insert into ssh.team (name) values ( )
13:38:45,782 DEBUG SQL:346 -insert into teammembers (team_id, teamrole, name, age) values ( , , , )
13:38:45,782 DEBUG SQL:346 - insert intoteammembers (team_id, teamrole, name, age) values ( , , , )
数据库
运行添加模块:
-----------------------------------------------------------------
运行修改模块:
team:
id name
1 team update
teammembers:
team_id name age teamrole
1