Hibernate实体映射配置1(java@注解方式)

实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取。在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义。

本文以java注解的形式总结映射关系配置。

实体类组件以及注解标签映射关系

实体类-----------@Entity/@Table----------数据表

Id--------------@Id----------主键

普通属性---------@Column----------普通键

集合属性---------@OneToMany/@ManyToOne/@ManyToMany/@OneToOne/@OneToMany----------外键

将映射文件配置到hibernate配置文件

Hibernate将通过配置文件(cfg.xml)定义实体和数据库关系映射

<mapping class="com.test.Cat"/>

主键映射

.Hibernate推荐实体类有主键列并且有setter 和 getter,且主键数据类型使用引用类型。因为,基础数据类型不能为null值,hibernate中主键的null表明实体类是处在瞬时(Transient)状态,非null表示处持久化()状态。

.用@Id声明为主键列,用@Column声明列名。

.列名属性名相同时候@Column可以省略。

.@GeneratedValue指定主键的生成策略

Example:

    @Id

    @Column(name = "id")

    @GeneratedValue(strategy = GenerationType.AUTO)

    private Integer id;

主键生成规则

目前@注解支持4种生成策略:

GenerationType.AUTO:根据数据库自己决定

GenerationType.TABLE:使用指定表决定主键的取值

GenerationType.SEQUENCE:使用sequence决定主键取值,适合支持sequence的数据库。

GenerationType.IDENTITY:identity类型的主键

普通属性配置

.java@注解使用@Column和@Basic配置普通属性。两者都可以省略

.@Column属性(声明字段约束)

 Nullable非空约束

Unique   唯一约束

 Insertable 插入约束(是否允许插入)

 Updateable 更新约束(是否允许更新)

 Length    列长度

 ColumnDefinition 列类型

Scale     整数长度

 Precision 小数点精度

@Basic属性(声明加载方式)

 Fetch 是否延迟加载

 Optional 该列是否可以为null

Example:

     @Column(name = "salary", scale = 8, precision = 2)

     @Basic(fetch = FetchType.LAZY, optional=true)

     private double salary;

日期属性配置

日期属性也是普通属性

除了@column和@Basic之外还可得使用@Temporal配置日期类型

java.sql.Date/java.sql.Time/java.sql.Timestamp都是java.util.Date的子类。实体类中声明成java.util.Date就行了。Hibernate根据日期配置的具体类型操作数据库。

Example:

    @Temporal(TemporalType.TIMESTAMP)

    // 日期类型(DATE, TIME还是TIMESTEMP)

    @Column(name = "createDate")

    private Date createDate;

临时属性映射

临时属性是实体类中方便运算的成员,不参与数据库的映射。防止hibernate把它和数据库进行映射导致产生异常,使用@Transient标记。

可以配置在属性上也可以配置在对应的getter/setter方法上。

Example:

    @Transient

    Public setterTemp (String temp){

this.temp = temp;

    }

版本属性映射

为了保证数据的准确性,程序必须保证只用一个线程同时访问数据。乐观锁和悲观锁是两种实现的方式。@Version是乐观锁的实现。版本列一般为数字列。

Example:

    @Version

    Private int id;

实体关系映射配置

见《Hibernate实体映射配置2(java@注解方式)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火狐浏览器工具栏/折叠菜单怎么设置?火狐浏览器工具栏/折叠菜单定制教程

为了方便用户将一些常用的功能及应用添加到工具栏/折叠菜单中&#xff0c;火狐浏览器推出了一项特别的功能“定制”。也就是说&#xff0c;借助该功能&#xff0c;用户就可以自由添加或替换工具栏/折叠菜单中的各类功能了!那么&#xff0c;该怎么操作呢?让我们来了解一下。 方…

Python 文件操作 'w+' 和 'wb'的区别

在文件上传的时候遇到个问题&#xff0c;就是 w 和 wb 在文件上传的时候是否回车。 根据项目的实景情况模拟一下区别。 首先说一下 w 和 wb 的区别 。w 是文本写入&#xff0c;wb是字节写入。 看代码。首先在window 操作系统下。 1.字节 # utf-8# 模拟上传的文件内容 read…

MySQL左关联、右关联、内关联查询

要说MySQL的关联查询&#xff0c;首先先说一下笛卡尔积&#xff0c; 有两个集合 A {1, 2},B {1, 3},这两个集合的笛卡尔积 A * B就有四种情况, A * B {(1,1), (1,3), (2,1),(2,3)} 笛卡尔积12132123 假设现在有两张表&#xff0c;table_A和 table_B table_Aa_user_ida_nam…

java获取net地址 本机

InetAddress netAddress;try {netAddress InetAddress.getLocalHost();String name netAddress.getHostName();System.out.println(name);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();}

手机优酷APP怎么上传视频

手机优酷怎样视频上传&#xff0c;自身在日常生活拍到好玩的视频&#xff0c;我们可以上传优酷&#xff0c;那如何上传到优酷呢&#xff1f; 01、 在优酷首页&#xff0c;点一下提交按键。 手机优酷APP怎么上传视频 02、 随后登录自身的优酷视频帐户。 手机优酷APP怎么上传…

warnings (imported as 'THREE') was not found in 'three'

这个问题还没解决&#xff01; 用Vue.js 重构项目的时候&#xff0c;引入three.js和其他相关的东西的时候会出现上面的警告。今天就说一下这个解决办法&#xff0c;但是我觉得这个方法不一定适用所有的项目。 一、引入THREE 首先用 npm 安装了 three, 然后再项目里面引入了。…

springMVC实体用注解管理,多对多 set集合元素排序问题 解决

实现效果 分类在set集合里不可排序 现要使商家拥有的相同的分来在同一列,需要把set集合里的元素放入list 但是问题是页面是双循环,必须以 . 的形式取集合元素所以需要把list集合声明到实体中,只做临时存储,所以写到dto类,这样就可排序了 我们用一个内部类Collections 的sort ( …

浏览器怎么截长图?怎么使用浏览器截长图?

我们在使用电脑浏览网页的时候有可能会想截取整篇网页&#xff0c;由于页面在电脑上显示不全&#xff0c;阅读的时候都需要滚动条来看&#xff0c;直接截屏根本截不全整个网页&#xff0c;这时候就需要截取网页的长截图了&#xff0c;那么怎么使用浏览器截长图呢? 1、以Edge浏…

three.js 把geometry转换成BufferGeometry

在 three.js 的文档里面有这个方法 https://threejs.org/docs/index.html#api/en/core/BufferGeometry.fromGeometry var bufferGeometry new THREE.BufferGeometry().fromGeometry( geometry );

进栈出栈示意图

进栈出栈示意图 12345 一次进栈 可以是54321,21543,32541等, 原理 : 后进先出,先进后出

Windows11怎么设置时间?Win11时间设置教程

许多小伙伴在使用电脑的时候&#xff0c;也会去关注一下时间&#xff0c;那么针对Windows11系统来说&#xff0c;默认的时间是美区的时间&#xff0c;那么我们要怎么更改呢?其实操作方法十分的简单&#xff0c;下面小编就带着大家一起看看吧! 操作方法&#xff1a; 1、打开菜…

浏览器与JavaScript(一)

作为web前端工程师&#xff0c;每天都会使用浏览器&#xff0c;所以就想总结下浏览器的知识&#xff0c;下面开始正文&#xff0c;本文的东西都是拿Chrome浏览器来说的。 浏览器是多进程。 我们先打开浏览器然后打开一个页面&#xff0c;这个时候我们并不清楚浏览器在后台为我…

java方法的重载与覆盖的返回值类型

public class A extends B{//下面的是方法的覆盖&#xff08;重写overRiding&#xff09;public void riding(){System.out.println("this is overRiding ");}//下面两个函数是方法的重载(overLoading)&#xff0c;但是返回值类型不同&#xff0c;可以运行public St…

edge浏览器设置兼容模式怎么设置

edge浏览器在win10系统中默认使用&#xff0c;整体来说还算是个不错的浏览器&#xff0c;跟微软账户关联&#xff0c;所以使用的人还挺多。但是对于edge浏览器来说&#xff0c;很多网页都需要使用兼容模式进行打开&#xff0c;这里小编就给大家分享下edge浏览器兼容模式设置的方…

threejs 局部辉光

首先看一下局部辉光的效果。 困扰很久的问题&#xff0c;终于解决了&#xff01;&#xff01;&#xff01; 具体找到解决的方法是看了这里和这里2。也是看了这两个帖子之后才找到解决方法。 这种辉光效果也是用后期处理方法&#xff0c;大家可以先看官网上的这个例子。 rend…

谷歌浏览器截图快捷键是什么?谷歌浏览器截图操作方法介绍

谷歌浏览器的截图方法谷歌浏览器没有自带的截图功能&#xff0c;我们需要下载相关的扩展功能和插件。 方法一、快捷键截图 1、找到键盘按键“Print Screen”按下即可全屏截图。 谷歌浏览器截图快捷键是什么&#xff1f;谷歌浏览器截图操作方法介绍 方法二、软件自带截图功能…

Uncaught (in promise) DOMException 报错

最近在项目里面加入视频自动播放&#xff0c;有时候会报错(RT)&#xff0c;不能自动播放。 <videoid"videoPlayer"v-show"!isNormalCamera"class"preview-video"name"media"controls"controls"autoplay"autoplay&q…

static,构造器,执行顺序

//静态代码块(加载类的时候执行)-->非静态代码块(执行构造器之前执行)-->然后是构造器//......

Win7系统默认浏览器的更改教程

Win7的默认浏览器一般是ie浏览器&#xff0c;但是我们经常会下载使用其它的浏览器&#xff0c;这时候我们就需要更改默认浏览器。那么应该如何更改默认浏览器呢?下面就和小编一起来看看Win7系统默认浏览器的更改教程吧 Win7系统默认浏览器的更改教程 1、首先在开始菜单中打开…