基于Annotation 的多对一ManyToOne双向和基于XML配置多对一双向
2012-08-03 14:31
344 查看
转自:http://stark-summer.iteye.com/blog/840712
基于Annotation:
package com.stark.hibernate.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_group")
public class Group {
private int groupId ;
private String groupName;
private Set<User> users= new HashSet<User>();
@Id
@GeneratedValue
public int getGroupId() {
return groupId;
}
public void setGroupId(int id) {
this.groupId = id;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String name) {
this.groupName = name;
}
/**
* One 代表Group,Many代表User ,我们需要在多的一方添加外键,如果不添加@JoinColumn(name="groupId"),将会生成一张t_group_t_user的中间表
* 否则将会在user表中自动添加groupId字段
* @return
*/
@OneToMany(mappedBy="group",cascade = { CascadeType.ALL})
@JoinColumn(name="groupId")
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}
PS:需要在Group表中添加OneToMany(mappedBy="group"),目的就是外键由User表来指定,如果不添加,将会在User中自动添加一条t_group_id,这是冗余字段的
package com.stark.hibernate.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
private int userId;
private String userName;
private Group group;
@Id
@GeneratedValue
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
/**
*
* 只需在多方User中添加一个Group同时添加注解@ManyToOne即可(Many代表User,One代表Group)
*/
@ManyToOne
@JoinColumn(name="groupId")
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}
生成DDL语句为:
create table t_group (groupId integer not null auto_increment, groupName varchar(255), primary key (groupId))
create table t_user (userId integer not null auto_increment, userName varchar(255), groupId integer, primary key (userId))
alter table t_user add index FKCB63CCB65F00FCD6 (groupId), add constraint FKCB63CCB65F00FCD6 foreign key (groupId) references t_group (groupId)
基于XML:
去掉Group和UserJavaBean中所有@注解
Group.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.stark.hibernate.model">
<class name="Group" table="t_group">
<id name="groupId" >
<generator class="native"/>
</id>
<property name="groupName"/>
<set name="users">
<key column="groupId"></key>
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
User.hml.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.stark.hibernate.model">
<class name="User" table="t_user">
<id name="userId">
<generator class="native"/>
</id>
<property name="userName" />
<many-to-one name="group" column="groupId" cascade="all" ></many-to-one>
</class>
</hibernate-mapping>
生成DDL语句:
与用Annotation生成的是一样的。
基于Annotation:
package com.stark.hibernate.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_group")
public class Group {
private int groupId ;
private String groupName;
private Set<User> users= new HashSet<User>();
@Id
@GeneratedValue
public int getGroupId() {
return groupId;
}
public void setGroupId(int id) {
this.groupId = id;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String name) {
this.groupName = name;
}
/**
* One 代表Group,Many代表User ,我们需要在多的一方添加外键,如果不添加@JoinColumn(name="groupId"),将会生成一张t_group_t_user的中间表
* 否则将会在user表中自动添加groupId字段
* @return
*/
@OneToMany(mappedBy="group",cascade = { CascadeType.ALL})
@JoinColumn(name="groupId")
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}
PS:需要在Group表中添加OneToMany(mappedBy="group"),目的就是外键由User表来指定,如果不添加,将会在User中自动添加一条t_group_id,这是冗余字段的
package com.stark.hibernate.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
private int userId;
private String userName;
private Group group;
@Id
@GeneratedValue
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
/**
*
* 只需在多方User中添加一个Group同时添加注解@ManyToOne即可(Many代表User,One代表Group)
*/
@ManyToOne
@JoinColumn(name="groupId")
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}
生成DDL语句为:
create table t_group (groupId integer not null auto_increment, groupName varchar(255), primary key (groupId))
create table t_user (userId integer not null auto_increment, userName varchar(255), groupId integer, primary key (userId))
alter table t_user add index FKCB63CCB65F00FCD6 (groupId), add constraint FKCB63CCB65F00FCD6 foreign key (groupId) references t_group (groupId)
基于XML:
去掉Group和UserJavaBean中所有@注解
Group.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.stark.hibernate.model">
<class name="Group" table="t_group">
<id name="groupId" >
<generator class="native"/>
</id>
<property name="groupName"/>
<set name="users">
<key column="groupId"></key>
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
User.hml.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.stark.hibernate.model">
<class name="User" table="t_user">
<id name="userId">
<generator class="native"/>
</id>
<property name="userName" />
<many-to-one name="group" column="groupId" cascade="all" ></many-to-one>
</class>
</hibernate-mapping>
生成DDL语句:
与用Annotation生成的是一样的。
相关文章推荐
- Hiberante学习10---基于Annotation配置的一对一双向外键关联
- [Hibernate]基于xml和annotation的many-to-many双向关联【学习笔记】
- Spring3与Hibernate4整合,Spring中配置Hibernate基于XML和annotation的sessionFactory方式。
- Spring中基于配置XML与Annotation注解配置AOP
- Spring基于XML和annotation的配置
- Spring依赖注入(基于XML配置文件和Annotation的方式完成属性装配)
- 基于SpringMVC Annotation配置的HelloWorld
- Servlet教程____一个简单的Servlet(基于web.xml配置servelt)
- Spring学习--基于 XML 的配置声明切面
- Spring -- 基于XML的AOP通知配置
- HibernateEhcacheJgroups - 基于Annotation的集群缓存配置
- ssm整合(基于xml配置方式)
- Struts2:输入校验-基于XML配置方式实现
- Spring Aop(七)——基于XML配置的Spring Aop
- Maven中基于POM.xml的Profile来动态切换配置信息
- spring采用基于xml配置方式进行事务的处理
- 转-springAOP基于XML配置文件方式
- Struts2基于XML配置文件实现输入校验
- Struts2学习笔记(十五):基于XML配置方式实现校验
- 基于XML的Spring AOP配置