Hibernate @Embeddable注释
在hibernate中实现自定义类型,只要实现UserType接口即可或者以Component的形式提供.JPA的@Embedded注释可以在你的Entity中使用一般的Java对象,此对象需要用@Embeddable标注
例如Person类有一个name属性,name应该有firstName,lastName两个属性,一般的写法直接在entity中写两个属性:
private String firstName;
private String lastName;
我们可以用一个Name类来代替这样的写法,此类包含了firstName和lastName,如此一来,我们在entity只要这样写: private Name name; 就可以了。
Name类的定义如下:
@Embeddable
public class Name implements Serializable {
private String firstName;
private String lastName;
//省略get、set方法
}
注意:
1.必须要实现serializable接口
2.需要有无参的构造函数
3.@Embeddable注释,表示此类可以被插入某个entity中
下面将Person类中的name属性与数据库表中的first,last两个字段进行映射,如下:
@Embedded
@AttributeOverrides({@AttributeOverride(name="firstName", column = @Column(name = "first_name")), @AttributeOverride(name = "lastName", column = @Column(name = "last_name")) })
public Name getName() {
return name;
}
通过@AttributeOverride注释来指定Name类的firstName,lastName与数据库中表的first_name,last_name进行映射.
很简单吧,看起来蛮爽的.可发现一个不大不小的缺点,比如,我要查询一个姓名dennis zane的人,如果是hibernate,我也许这样做:
session.createQuery("from Person p where p.name=?").setParameter(0,name).list();
Hibernate将自动将你的自定义类型进行匹配,可如果我在JPA中这样写:
em.createQuery("select p from Person p where p.name=:name").setParameter("name",name);
查询出错...郁闷,把整个name对象作为查询参数传进去就出错,我非要这样写:
em.createQuery("select p from Person p where p.name.firstName=:name1 and p.name.lastName=:name2").setParameter("name1",name.getFirstName()).setParameter("name2",name.getLastName);
也就是需要你自己去映射Name的每一个属性.
Hibernate @Embeddable注释的更多相关文章
- Hibernate的注释该如何使用?每一个注释代表什么意思?
出自:java快快飞 原文地址:http://blog.sina.com.cn/s/blog_697b968901016s31.html Hibernate的注释该如何使用?每一个注释代表什么意思? ...
- Hibernate 使用注释书写配置文件
Hibernate 使用注释 Hibernate使用注释有个好处就是我们不需要建立.hbm.xml文件,直接在实体类中添加注解就可以完成往数据库中进行数据操作 配置文件:hibernate.cfg.x ...
- Hibernate @Embeddable注解
在hibernate中实现自己定义类型,仅仅要实现UserType接口就可以或者以Component的形式提供.JPA的@Embedded有点类似,通过此凝视能够在你的Entity中使用一般的java ...
- Hibernate使用注释
可以使用注释创建hibernate应用程序. 有许多注释可用于创建hibernate应用程序,如@Entity,@Id,@Table等. Hibernate注释基于JPA 2规范,并支持所有功能.所有 ...
- hibernate 配置+注释
Hibernate配置属性 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.c ...
- hibernate简单注释(一.1)
**************************************************************************************************** ...
- hibernate简单注释(一)
*****************************hibernate.cfg.xml************************************ <?xml version= ...
- JPA的Embeddable注解
来源于http://zjsword2000.blog.163.com/blog/static/4583983320083184844734/ 在hibernate中实现自定义类型,只要实现UserTy ...
- Hibernate Tools
(声明)本文转自:http://linjia880714.iteye.com/blog/859334 hibernate-tools详细使用教程 使用hibernate-tool的版本是hiberna ...
随机推荐
- js运算
今天把五个题目都做出来了,虽然可能用的方法比较麻烦.不过总体来说不错: <!DOCTYPE html><html> <head> <meta charset= ...
- Java中"==" 和 equals 的区别
"=="比较的是地址值 equals 比较的是内容 看例子能够更加清晰的理解 eg: String s1="java",s2="java"; ...
- Servlet知识点
如果请求采用Get方式,则重写doGet()方法,如果请求采用Post方式,则重写doPost()方法. 下面是重写doGet()方法的servlet例子. servlet继承如下类: 整体结构: 在 ...
- Nginx学习之HTTP/2.0配置
哎呀,一不小心自己的博客也是HTTP/2.0了,前段时间对网站进行了https迁移并上了CDN,最终的结果是这酱紫的(重点小绿锁,安全标示以及HTTP/2.0请求). 科普 随着互联网的快速发展,HT ...
- 谈MVVM
什么是MVVM? MVVM(模型-视图-视图模型,Model-View-ViewModal)是一种架构模式,并非一种框架,它是一种思想,一种组织与管理代码的艺术.它利用数据绑定,属性依赖,路由事件,命 ...
- js 四舍五入函数 toFixed(),里面的参数 就是保留小数的位数。
js 四舍五入函数 toFixed(),里面的参数 就是保留小数的位数. <script language="javascript"> document.write(& ...
- H - transaction transaction transaction
https://vjudge.net/contest/184514#problem/H 题意: 一个商人为了赚钱,在城市之间倒卖商品.有n个城市,每个城市之间有且只有一条无向边连通.给出n个城市的货物 ...
- .NET技术基础总结 ----第一章
. 一..NET定义 很多人常说我是做.NET开发的,但是,NET到底是什么呢?是一个开发工具?还是一个平台?或者是一个软件环境? 其实,我觉得吧,他是一种概念.一种构想吧.微软的产品发布会上,主持人 ...
- Python闭包及其作用域
Python闭包及其作用域 关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域 ...
- Swiper 滑动
1.http://www.swiper.com.cn/download/ 下载Swiper.JS Swiper.CSS 2.引入项目,添加html <div class="cont ...