Hibernate学习篇05——联合主键(二)

来源:互联网 发布:记账app 知乎 编辑:程序博客网 时间:2024/06/06 00:03

这是第二种方式,采用联合主键类来实现,第一种方式链接:联合主键方式一。

表结构

drop table user3;create table USER3(  USERNAME VARCHAR2(32),  PASSWORD VARCHAR2(32),  NAME     VARCHAR2(32));alter table user3 add primary key (username,name);insert into user3 (username,name,password) values ('zhangsan','zs','111111');insert into user3 (username,name,password) values ('zhangsan','12','222222');insert into user3 (username,name,password) values ('lisi','ls','333333');insert into user3 (username,name,password) values ('lisi','34','444444');commit;
User.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.masteringhibernate.a042compositeid"><class name="User" lazy="true" table="USER3"><composite-id name="userId" class="UserId"><key-property name="username" /><key-property name="name" /></composite-id><property name="password" /></class></hibernate-mapping>
User.java

package com.masteringhibernate.a042compositeid;public class User {private UserId userId;private String password;public UserId getUserId() {return userId;}public void setUserId(UserId userId) {this.userId = userId;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
UserId.java

package com.masteringhibernate.a042compositeid;import java.io.Serializable;public class UserId implements Serializable {private String username;private String name;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
Test.java

package com.masteringhibernate.a042compositeid;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class Test {private static SessionFactory sessionFactory;public static void main(String[] args) {Configuration configuration = new Configuration().configure("com/masteringhibernate/a042compositeid/hibernate.cfg.xml");SessionFactory sessionFactory = configuration.buildSessionFactory();Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();UserId userIdTmp1 = new UserId();userIdTmp1.setUsername("zhangsan");userIdTmp1.setName("zs");UserId userIdTmp2 = new UserId();userIdTmp2.setUsername("zhangsan");userIdTmp2.setName("12");User user1 = (User)session.get(User.class,userIdTmp1);System.out.println("username:"+user1.getUserId().getUsername()+"\t\tname:"+user1.getUserId().getName()+"\t\tpassword:"+user1.getPassword());User user2 = (User)session.get(User.class, userIdTmp2);System.out.println("username:"+user2.getUserId().getUsername()+"\t\tname:"+user2.getUserId().getName()+"\t\tpassword:"+user2.getPassword());tx.commit();session.close();}}
日志:

Hibernate: select user0_.username as username0_0_, user0_.name as name0_0_, user0_.password as password0_0_ from USER3 user0_ where user0_.username=? and user0_.name=?username:zhangsanname:zspassword:111111Hibernate: select user0_.username as username0_0_, user0_.name as name0_0_, user0_.password as password0_0_ from USER3 user0_ where user0_.username=? and user0_.name=?username:zhangsanname:12password:222222








0 0