hibernate的主外键关系映射



hibernate的主外键关系映射

domain
1.User.java

import java.util.Set;
public class Users {
private Integer userid;
private String username;
private String password;
private Set<Messages> getmessage;//对应外键
private Set<Messages> sendmessage;
2.Message.java

import java.util.Date;
public class Messages {
private Integer messageid;
private Users sender;//外键
private Users getter;
private Date pubdate;
private String content;
对应的表

CREATE TABLE `users` (
  `userid` int(11) NOT NULL,//主键
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `messages` (
  `messageid` int(11) NOT NULL,//主键
  `content` longtext,
  `pubdate` datetime DEFAULT NULL,
  `getter_id` int(11) DEFAULT NULL,//外键
  `sender_id` int(11) DEFAULT NULL,//外键
  PRIMARY KEY (`messageid`),
  KEY `FKE475014C9121846B` (`getter_id`),
  KEY `FKE475014C2BA3CB01` (`sender_id`),
  CONSTRAINT `FKE475014C2BA3CB01` FOREIGN KEY (`sender_id`) REFERENCES `users` (`userid`),
  CONSTRAINT `FKE475014C9121846B` FOREIGN KEY (`getter_id`) REFERENCES `users` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.Users.hbm.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<!DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping>
<class name=”com.ru.domain.Users” table=”users”>
<id name=”userid” type=”java.lang.Integer”>
<column name=”userid”/>
<generator/>
</id>
<property name=”username” type=”java.lang.String”>
<column name=”username” length=”20″></column>
</property>
<property name=”password” type=”java.lang.String”>
<column name=”password” length=”20″></column>
</property>
//关系映射,一对多。对应外键
<set name=”getmessage”>
<key column=”getter_id”/>//对应表的字段名
<one-to-many/>//对应外键所在对象
</set>
<set name=”sendmessage”>
<key>
<column name=”sender_id”/>
</key>
<one-to-many/>
</set>
</class>
</hibernate-mapping>
4.Messages.hbm.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<!DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping>
<class name=”com.ru.domain.Messages” table=”messages”>
<id name=”messageid” type=”java.lang.Integer”>
<column name=”messageid”></column>
<generator></generator>
</id>
<property name=”content” type=”java.lang.String”>
<column name=”content” length=”20000″></column>
</property>
<property name=”pubdate” type=”java.util.Date”>
<column name=”pubdate”></column>
</property>
<!– 配置getter和sender –>
<many-to-one name=”getter” >
<column name=”getter_id”/>
</many-to-one>
<many-to-one name=”sender” >
<column name=”sender_id”/>
</many-to-one>
</class>
</hibernate-mapping>
6.hibernate.cfg.xml
<?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”>
 
<!– Generated by MyEclipse Hibernate Tools.                   –>
<hibernate-configuration>
 
<session-factory>
<property name=”dialect”>
org.hibernate.dialect.MySQLDialect
</property>
<property name=”connection.url”>
jdbc:mysql://localhost:3306/messagebord
</property>
<property name=”connection.username”>root</property>
<property name=”connection.password”>123456</property>
<property name=”connection.driver_class”>
com.mysql.jdbc.Driver
</property>
<!– 显示hql语句 –>
<property name=”show_sql”>true</property>
<!– 当获取session的方式为getcurrentsession的时候需要配置 –>
<property name=”hibernate.current_session_context_class”>
thread
</property>
<!– 当配置好映射文件和类,数据库中需要自动产生表示这样配置 –>
<property name=”hbm2ddl.auto”>update</property>
<mapping resource=”com/ru/domain/Messages.hbm.xml” />
<mapping resource=”com/ru/domain/Users.hbm.xml” />
 
 
</session-factory>
 
</hibernate-configuration>