【hibernate框架】各种问题用注解Annotation和mxl配置的解决

简介:
1.表名和类名不同,对表名进行配置


a)Annotation:


一般说来,表名一定要和实体类的名称一样。
但如果表明和实体类名不一致,可以用以下两种方式指明实体类对应的表名:


1.Annotation情况下:
package cn.edu.hpu.model;


import javax.persistence.Entity;
import javax.persistence.Id;


import javax.persistence.Table;


//‘@+语句’就叫做注解
//@Entity表示这家伙是个实体类


//@Table(name="_teacher")
//指定实体类对应的表名(如果没有这个表hibernate会自动创建)


@Entity 
@Table(name="_teacher")
public class Teacher {
	private String name;
	private int id;
	private String title;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	
	
}



运行测试类时自动创建了表(可不会自动创建数据库哦)
自动创建表是由hibernate.cfg.xml中的这个配置语句决定的:
<!-- Drop and re-create the database schema on startup 是否自动生成建表语句-->
        <property name="hbm2ddl.auto">update</property>



b)xml:
在实体类的配置文件(如Student.hbm.xml)中的class标签里写 table="stu"指定表名:
<class name="Student" table="stu">






2.字段名和属性不同
a)字段名的get方法上的注解默认为@Basic,不用写。但是如果字段名和表里属性值不一样的时候,需要用@Column来解决,name指定插入到数据库的属性名(如果没有,hibernate会自动创建)
@Column(name="_title")
	public String getTitle() {
		return title;
	}

b)xml中不用写column(如果你非要配,就是这样):
 <property name="name" column="_name"></property>




3.不需要psersistence的字段
a)Annotation:@Transient

在JavaBean中这样写
private String yourWifeName;
	
	@Transient
	public String getYourWifeName() {
		return yourWifeName;
	}
	public void setYourWifeName(String yourWifeName) {
		this.yourWifeName = yourWifeName;
	}


就不会对yourWifeName进行持久化,也就不会在数据库中创建这个属性


b)xml不写


4.映射日期与时间类型,指定时间精度
a)Annotation:@Temporal
在teacher的javabean中加入Date字段生成属性:
private Date brithday;
	
	public Date getBrithday() {
		return brithday;
	}
	public void setBrithday(Date brithday) {
		this.brithday = brithday;
	}


数据库会生成一个datetime类型的属性


在测试类中添加生日(为当前日期):
t.setBrithday(new Date());


会在数据库中看到存入的数值:
2014-12-03 15:05:31


那么如果只想要日期,或者只想要时间,就需要对时间进行精确定位,方法为:
@Temporal(TemporalType.DATE)
	public Date getBrithday() {
		return brithday;
	}
数据库的相应属性就会改成Date类型,只会存储日期,不存时间
b)xml:指定type
<property name="brithday" type="date"></property>




5.映射枚举类型
a)@Enumerated


创建了一个枚举类型,用来存放职称的等级。
public enum ZhiCheng {
		A,B,C;
	}
在javabean创建相应字段和属性:
private ZhiCheng zhicheng;
	
	public ZhiCheng getZhicheng() {
		return zhicheng;
	}
	public void setZhicheng(ZhiCheng zhicheng) {
		this.zhicheng = zhicheng;
	}
因为是特殊类型,hibernate无法向数据库相应表中构建正确类型的属性,所以要重新指定字段的类型:
指定为string:
@Enumerated(EnumType.STRING)
	public ZhiCheng getZhicheng() {
		return zhicheng;
	}
指定为integer:
@Enumerated(EnumType.ORDINAL)
	public ZhiCheng getZhicheng() {
		return zhicheng;
	}
b)xml:非常麻烦



6.字段映射的位置(field或者get方法):
a)best practice:保持field和get set方法的一致
字段映射的位置(如@Id)可以放在field上面,也可以放在get方法上
例如放在get方法上:
private int id;
	@Id
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
放在field上:
@Id
	private int id;
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
一般工作的写法,是放在field上,这样看起来比较集中。但是,这种写法实际上破坏了java的面向对象的封装性。
原因是,字段一般说是private的。如果你在私有的上面写了注解的话,就相当于hibernate直接去访问你私有的成员变量(用反射机制)。
从设计上来讲,不推荐用放在field上的写法,因为们把成员变量设成私有的就是不想让外部类去直接拿我们的数据,这样不合适。

转载请注明出处: http://blog.csdn.net/acmman
相关文章
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
138 1
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
178 1
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
495 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
171 0
|
数据库 Java 数据库连接
Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?
【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。
404 0
|
前端开发 Java 关系型数据库
在Spring3 MVC中五步配置集成注解方式Hibernate3
在Spring3 MVC中五步配置集成注解方式Hibernate3
114 3
|
JSON Java 数据库连接
Hibernate中使用@Lob 注解保存String[] 问题
Hibernate中使用@Lob 注解保存String[] 问题
120 2
|
Java 数据库连接 数据库
探索JPA生态:Hibernate与其他ORM框架的对比分析
【6月更文挑战第25天】**JPA标准下的Hibernate是流行的ORM实现,提供丰富功能如二级缓存和延迟加载,但其学习曲线较陡,性能优化复杂。相比如MyBatis,Hibernate的JPQL更面向对象,MyBatis则接近SQL。选择ORM需考虑项目需求和个人偏好。**
221 0
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
183 1