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 ...
随机推荐
- ueditor单独调用上传附件和图片的功能
javascript富文本编辑器使我们添加.编辑网站中的文章更加方便和容易.这些富文本编辑器提供了所见即所得(What You See Is What You Get - WYSIWYG)的功能,可以 ...
- 前端开发中一些好用的chrome插件总结
下载了很多chrome插件和应用,有些是常用的,有些偶尔用一次,有些是不止开发中用的,现做一下总结: 红色是个人认为比较好用的,排名不分先后 1.AppJump管理应用的插件 安装了许多应用之后肯定 ...
- Win7怎么把运行添加到Win快捷菜单的右侧、、、
win7怎么把运行添加到Win快捷菜单的右侧... ------------------------------ 右键桌面任务栏--选择属性 ----------------------------- ...
- Vim入门学习之Vim解析
Vim解析... ----------------------- 首先你要会从官网上下载你想要的Vim版本: 官网: http://www.vim.org/==================== ...
- OminiMarkupPreview快捷键
The default key bindings: Windows, Linux: Ctrl+Alt+O: Preview Markup in Browser. Ctrl+Alt+X: Export ...
- KVM套件-linux基础
KVM套件 使用KVM的虚拟机,通过KVM的虚拟机克隆功能,提高效率,避免在实验过程中重装系统. 另外,在LINUX系统上使用KVM的虚拟化,可以获得更好性能,且可以提前熟悉企业级虚拟化技术. 过程: ...
- 菜单栏—View(视图)菜单
- Java的常用操作符
操作符用于接受一个或多个参数,并生成一个新的值.加号和一元的正号(+).减号和一元的负号(一).乘号(*).除号(/)以及赋值号(=)的用法和大多数编程语言都类似. 操作符作用于操作数,生成一个新值. ...
- 201671010133 2016-2017-2 《java程序设计》 初学java!
新学期伊始,我心中既充满了期待和希望,又有些许激动和感慨.期待的是即将接触许多新的知识,期待未来比过去过的更加踏实有趣,期待遇到更好的人和事等等.当然,面对从未了解过的新事物时,我想每个人的想法都大致 ...
- jmeter ---json几种读取方式,ArrayList循环读取
在之前写过提取json数据格式的文章,这次对jmeter读取json数据格式进行整理. 举例一个接口的response 格式如下: { "data" : { "devic ...