`

基于Annotation 的多对一ManyToOne双向和基于XML配置多对一双向

阅读更多
基于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生成的是一样的。






分享到:
评论

相关推荐

    Hibernate一对多(多对一)双向关联(annotation/xml)

    本文将深入探讨这两种关联方式在使用Hibernate时的配置,包括基于注解(Annotation)和XML的方式。 1. **一对多关联**(Many-to-One) - 在这种关系中,一个实体可以对应多个其他实体。例如,一个班级可以有多个...

    hibernate4.3.8的annotation及xml的一对多的双向案例

    本案例主要探讨的是Hibernate 4.3.8版本中如何使用注解和XML配置实现一对多的双向关联关系。这种关系在实际的业务场景中十分常见,例如一个用户可以有多个订单,一个订单对应一个用户。 首先,我们来看一下注解的...

    Hibernate annotation JPA 一对多,多对多

    在Java的持久化框架中,Hibernate...以上内容详细解释了如何使用Hibernate注解处理JPA中的一对多、多对一和多对多关系。通过理解和应用这些概念,开发者可以更高效地管理数据库中的对象关系,并实现更灵活的数据操作。

    Hibernate一对多映射配置详解

    在Java持久化框架Hibernate中,一对多映射...总之,Hibernate的一对多映射配置提供了灵活的方式,允许开发者根据需求选择XML或注解方式进行关联实体的定义。理解并正确配置这些关系对于实现高效的数据库操作至关重要。

    Hibernate_Annotation参考文档

    - 使用`@ManyToOne`注解进行多对一映射配置。 - **一对多映射**: - 使用`@OneToMany`注解进行一对多映射配置。 - **多对多映射**: - 使用`@ManyToMany`注解进行多对多映射配置。 - **次级表映射**: - 使用`...

    hibernate annotation+slf4j

    - `@ManyToOne`表示多对一的关系,常用于表示一个实体类拥有另一个实体类的引用。 - `@OneToOne`表示一对一的关系,可以用于一对一的关联映射。 - `@OneToMany`表示一对多的关系,一个实体可以有多个子实体。 - ...

    Hibernate annotation 详解

    - **@ManyToOne**: 多对一关联,通常需要配合`@JoinColumn`指定关联信息。 - **@ManyToMany**: 多对多关联,需要通过中间表实现,使用`@JoinTable`定义中间表。 5. **懒加载与立即加载(@LazyCollection)** - `@...

    Hibernate_学习笔记.

    - **多对一、一对多的区别**:多对一是指多个对象共享一个父对象,一对多是指一个父对象拥有多个子对象。 - **实体类**:包含属性及其关系的类。 - **xml方式:映射**:通过`&lt;one-to-many&gt;`标签进行映射。 - **...

Global site tag (gtag.js) - Google Analytics