hibernate之实体@onetomany和@manytoone双向注解(转)

下面是User类:

@onetomany

@Entity
@Table(name="user")
public class User implements Serializable{

    private static final long serialVersionUID = 6177417450707400228L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name="id")
	private int id;

	@Column(name="name")
	private String name;

	@Column(name="password")
        private String password;

    /*
     * cascade:为级联操作,里面有级联保存,级联删除等,all为所有
     * fetch:加载类型,有lazy和eager二种,
     *   eager为急加载,意为立即加载,在类加载时就加载,lazy为慢加载,第一次调用的时候再加载,由于数据量太大,onetomany一般为lazy
     * mappedBy:这个为manytoone中的对象名,这个不要变哦
     * Set:这个类型有两种,一种为list另一种为set
     *
     *
     */
    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="user")
	private Set setRole; 

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Set getSetRole() {
		return setRole;
	}

	public void setSetRole(Set setRole) {
		this.setRole = setRole;
	}

}

@manytoone

@Entity
@Table(name="role")
public class Role {

	private static final long serialVersionUID = 6177417450707400228L;   

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="role_id")
	private int role_id;

	@Column(name="role_name")
    private String role_name;

	@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
	@JoinColumn(name="user_id")//加入一列作为外键
	private User user;

    public int getRole_id() {
		return role_id;
	}
	public void setRole_id(int role_id) {
		this.role_id = role_id;
	}

	public String getRole_name() {
		return role_name;
	}
	public void setRole_name(String role_name) {
		this.role_name = role_name;
	}

	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}

}

有了这二个注解,我们不需要建表,hibernate会为我们自动建立表以及各种表级联系

其中@table为映射表名,@column为映射列名,其他的我不一一细说了。
下面就是操作了,定义了级联操作,下面是保存的。

public Role save() {
		User user=new User();
		user.setName("123456");
		user.setPassword("123456");

		Role role=new Role();
		role.setRole_name("student");
		role.setUser(user);

		Role roler=registerDao.save(role);

		return roler;
	}
时间: 2024-07-29 13:59:40

hibernate之实体@onetomany和@manytoone双向注解(转)的相关文章

hibernate one-to-many many-to-one 双向注解

建表语句: DROP TABLE IF EXISTS `t_company`; CREATE TABLE `t_company` ( `companyId` int(10) unsigned NOT NULL AUTO_INCREMENT, `companyName` varchar(30) NOT NULL, PRIMARY KEY (`companyId`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gb2312; INSERT INT

Hibernate 注解 (Annotations 三)多对一双向注解

注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释. 接下来我们讲解一下多对一双向注解: 我以部门表和员工表作为示例讲解. 第一步:创建实体类 Dept(部门表) package cn.onetomanydouble.entity; import org.hibernate.annotations.*; import org

Hibernate 注解(Annotations 四)多对多双向注解

注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释. 接下来讲解多对多双向注解: 我以用户和房子作为示例讲解. 第一步:准备实体类 House(房间表) package cn.manytomany.entity; import javax.persistence.*; import java.util.HashSet; im

Hibernate的单向OneToMany、单向ManyToOne

单向OneToMany 一个用户有多张照片,User----->Images是一对多关系,在数据库中Images维护一个外键useid 1.在映射关系的主控方Image这边,我们什么都不做.(为什么说Images是主控方呢?因为外键又Images维护) 2.在映射关系的被控方User这边,需要添加@OneToMany.@JoinColumn注解 public class User{ @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="

Rhythmk 学习 Hibernate 07 - Hibernate annotation 实体注解

参考: http://docs.jboss.org/hibernate/annotations/3.4/reference/zh_cn/html_single/ 1.系统配置: 可以通过使用  mapping的 resource,于class 属性混合配置 <mapping resource="com/rhythmk/model/product.hbm.xml" /> <mapping class="com.rhythmk.model.User"&

spring-data-jpa——如果使用了one-to-many,many-to-one的注解,在Jackson进行json字符串化时出现错误的解决方案

参考资料: http://blog.csdn.net/remote_roamer/article/details/51330843 http://blog.csdn.net/xiaodaiye/article/details/51118870 在spring-data-jpa中,使用了one-to-many和many-to-one注解,在进行json字符串化时出现错误. 经查阅资料找到以下解决方法: 通过在主表的pojo中增加@JsonManagedReference来注解关联字段: @OneT

[Hibernate Search] 实体类型的映射

实体类型映射 在上一篇文章中,简要介绍了如何使用Hibernate Search来对一个实体进行全文搜索. 然而,在真实的应用中,实体与实体之间的关系也许更为复杂.为了对复杂实体进行搜索,就需要让底层的Lucene查询也能够理解这些关系. 下图反映了Database,Hibernate,Hibernate Search和Lucene之间的关系: 域映射选项(Field Mapping Options) 我们已经知道@Field注解用来让某个域可以被全文搜索到. 实际上,在添加该注解后,Hiber

hibernate的实体映射(一对一)

Hibernate的实体映射的主要任务就是实现数据库关系表与持久化类之间的映射,其关系如图: 双向映射一对一关联关系,通过唯一外键方式进行一对一关联映射,就是一个表的外键和另一个表的唯一主键对应形成一对一映射关系. 例如,以下例子,社团与社团负责人(社长),两者之间是一对一的关联关系: 持久化类association.java: public class Association implements java.io.Serializable{     private Integer id;   

关于hibernate 多实体(多表)连接查询映射到实体的讨论

前提表与实体信息: 在hibernate 查询中,我们经过遇到三种情况: 1.查询事个实体,如: select  b from TableB b; 返回的LIst 中封装的是 实体TableB的实例. 2.查询单个属性,如: select b.id from TableB b; hibernate 返回的List 中封装的是ojbect对象. 3.当查询多于一个属性且又不是整个实体时,如:select b.id,b.mes from TableB b;返回的List中封装的是Object[]数组