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;}@Idpublic 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;@Transientpublic 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;@Idpublic int getId() {return id;}public void setId(int id) {this.id = id;}

放在field上:

@Idprivate 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

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

  1. (转)Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义

    1.从Spring2.0以后的版本中,Spring也引入了基于注解(Annotation)方式的配置,注解(Annotation)是JDK1.5中引入的一个新特性,用于简化Bean的配置,某些场合可以 ...

  2. hibernate mysql annotation_Hibernate基于注解annotation的配置

    Annotation在框架中是越来越受欢迎了,因为annotation的配置比起XML的配置来说方便了很多,不需要大量的XML来书写,方便简单了很多,只要几个annotation的配置,就可以完成我们 ...

  3. 中文命名之Hibernate 5演示 - 使用注解(annotation)而非xml定义映射

    前文中文编程:中文命名之Hibernate 4+MySQL演示最后留下了个Hibernate 5之后出现的问题, 于是在Hibernate社区提交了报告: Seemingly regression s ...

  4. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...

  5. hibernate框架之主键生成

    一. hibernate 框架中主键的生成策略 (1)native: 表示由设置的方言决定采用什么数据库生成主键方式,根据底层数据库能力选择identity.sequence中的一个. 例如:在MyS ...

  6. SpringDataJPA+Hibernate框架源码剖析(六)@PersistenceContext和@Autowired注入EntityManager的区别

    SpringDataJPA+Hibernate框架源码剖析系列文章: SpringDataJPA+Hibernate框架源码剖析(一)框架介绍 SpringDataJPA+Hibernate框架源码剖 ...

  7. 从零打造在线网盘系统之Hibernate框架起步

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  8. Java注解(Annotation)详解

    转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...

  9. 框架开发之Java注解的妙用

    框架开发之Java注解的妙用 注解的好处: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程 ...

最新文章

  1. 360金融首席科学家张家兴:我们如何做数据AI融合中台?
  2. 迈克尔戴尔展望医疗愿景:信息驱动创新
  3. 爱奇艺java 架构师_爱奇艺个性化实时推荐系统整体流程图 拿去细品
  4. 【原】Mac下统计任意文件夹中代码行数的工具——cloc
  5. linux查看告警日志,shell脚本,用于监视Linux中的消息日志(警告,错误和严重)...
  6. centos打显卡驱动命令_在Linux系统下安装Nvidia官方显卡驱动的方法
  7. 中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
  8. 一天学会php(下)
  9. Android 按钮选择状态,如何修改Android中的默认按钮状态而不影响按下和选择的状态?...
  10. Linux从某个字符串处换行,Windows和Linux中任意字符串替换成换行符的问题
  11. Spring数据转换(二)-- @InitBinder
  12. android源码编译的小小总结
  13. 怎样查看sql服务器日志文件,怎么通过sql日志,查看以前执行过的sql语句
  14. 漫漫学习路——计算机专业学习经验记录
  15. box-sizing: border-box;box-sizing:content-box;讲解
  16. Mangopi MQ-R:T113-s3编译Tina Linux系统(二)SDK目录
  17. thinkpad笔记本电脑怎么关闭触摸板
  18. Core Data的使用
  19. C++ fgets()函数
  20. java学习之LinkedList(链表)

热门文章

  1. 优先队列-二叉堆-堆排序原理-Java相关API
  2. 多线程Thread中常用方法,优先级的使用
  3. java swing 代码_java swing编写gui生命游戏代码,新手上路
  4. 月均数据_月均收入15k的数据产品经理=数据+产品经理?
  5. txt替换回车键符号怎么打_电脑键盘上那个点符号怎么打出来的?
  6. 如何画心_字画如何装裱?仅需三步!
  7. Python基本操作(五) 标准数据类型(不可变类型)
  8. 5条简洁的JavaScript技巧
  9. 大佬教你如何写出更好的CSS,分享web前端资料
  10. 分享一年定级资深前端,与你分享他的完整学习过程