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
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;
对应的表 `userid` int(11) NOT NULL,//主键
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
PRIMARY KEY (`userid`)
对应的表
CREATE TABLE `users` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
`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`)
CREATE TABLE `messages` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.Users.hbm.xml
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 ”-//Hibernate/Hibernate Configuration DTD 3.0//EN”
”http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
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′?>
6.hibernate.cfg.xml
<?xml version=’1.0′ encoding=’UTF-8′?>
<!DOCTYPE hibernate-configuration PUBLIC
<!– 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>