JPA 菜鸟教程 14 自定义类型-@Embedded+@Embeddable
来源:互联网 发布:常熟淘宝培训 编辑:程序博客网 时间:2024/05/22 17:49
GitHub
自定义类型
在hibernate中实现自定义类型,需要去实现UserType接口即可或者以Component的形式提供。
JPA的@Embedded注解有点类似,通过此注解可以在Entity模型中使用一般的java对象,不过此对象还需要用@Embeddable注解标注。
需求产生
Employee类有一个address属性,
address应该有city,street两个属性,
一般的写法直接在Employee类中写两个属性:
private String city;
private String street;
现在可以用一个Address类来代替此类写法,Address类包含了city和street,如此一来,我们在Employee类只要这样写:
private Address address;
ddl语句
CREATE TABLE `t_employee` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `city` varchar(255) DEFAULT NULL, `street` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Address
package com.jege.jpa.embeddable;import javax.persistence.Embeddable;/** * @author JE哥 * @email 1272434821@qq.com * @description:实现自定义类型,在hibernate里面需要实现UserType接口 */@Embeddablepublic class Address { private String city; private String street; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; }}
Employee
package com.jege.jpa.embeddable;import javax.persistence.Embedded;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;/** * @author JE哥 * @email 1272434821@qq.com * @description:@Embedded注解 */@Entity@Table(name = "t_employee")public class Employee { @Id @GeneratedValue private Long id; private String name; @Embedded private Address address; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; }}
MainTest
package com.jege.jpa.embeddable;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;/** * @author JE哥 * @email 1272434821@qq.com * @description:自定义类型-@Embedded+@Embeddable测试 */public class MainTest { private static EntityManagerFactory entityManagerFactory = null; private EntityManager entityManager = null; @BeforeClass public static void setUpBeforeClass() throws Exception { entityManagerFactory = Persistence.createEntityManagerFactory("com.jege.jpa"); } @Before public void setUp() throws Exception { entityManager = entityManagerFactory.createEntityManager(); } @Test public void persist() { Address address = new Address(); address.setCity("beijing"); address.setStreet("王府井大街"); Employee employee = new Employee(); employee.setAddress(address); employee.setName("jege"); entityManager.getTransaction().begin(); entityManager.persist(employee); entityManager.getTransaction().commit(); } @After public void tearDown() throws Exception { if (entityManager != null && entityManager.isOpen()) entityManager.close(); } @AfterClass public static void tearDownAfterClass() throws Exception { if (entityManagerFactory != null && entityManagerFactory.isOpen()) entityManagerFactory.close(); }}
源码地址
https://github.com/je-ge/jpa
如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡。
您的支持将鼓励我继续创作!谢谢!
0 0
- JPA 菜鸟教程 14 自定义类型-@Embedded+@Embeddable
- JPA 菜鸟教程 13 复合主键-@EmbeddedId+@Embeddable
- @Embedded和@Embeddable
- JPA的Embeddable注解
- JPA的Embeddable注解
- JPA的Embeddable注解
- JPA 菜鸟教程 异常 集锦
- JPA 主键@Id、@IdClass、@Embeddable、@EmbeddedId
- JPA联合主键的使用(@EmbeddedId+@Embeddable)
- Spring Boot 菜鸟教程 2 Data JPA
- JPA 菜鸟教程 1 环境搭建
- JPA 菜鸟教程 2 单表操作
- JPA 菜鸟教程 4 单向一对多
- JPA 菜鸟教程 5 双向一对多
- JPA 菜鸟教程 20 JPA2.0 @CollectionTable
- JPA 菜鸟教程 21 JPA2.0 @MapKeyColumn
- JPA 菜鸟教程 19 jpa uuid主键生成策略
- Hibernate中@Embedded和@Embeddable注解的使用
- HIVE表同步至MySQL表
- selenium+ Phantomjs爬取动态网页
- LeetCode 2016 424,187,200,376,390,354,15,18,419
- java多态的特性
- Netty之TCP粘包拆包问题
- JPA 菜鸟教程 14 自定义类型-@Embedded+@Embeddable
- 【HTML5】折线
- 面试知识点(第二弹:多线程)
- Array(4) -- Rotate Array
- 51Nod-1712-区间求和
- 如何用70行代码实现深度神经网络算法
- 汇编 入栈出栈
- 如何中断Unity动画状态机的转换过程?
- freopen重定向输入