JavaEE(13) - JPA属性映射
1. 映射实体的属性
#1. 使用@Transient修饰不想持久保存的Field
#2. 使用@Enumerated修饰枚举类型的Field
#3. 使用@Lob, @Basic修饰枚举类型的Field
#4. 使用@Temporal修饰枚举类型的Field
2. 将实体映射到多个数据表
3. 映射复合类型的属性
4. 映射实体的主键
#1. IdClass
#2. EmbeddedId
------------------------------------------------
1. 映射实体的属性
#1. 使用@Transient修饰不想持久保存的Field(Net Beans创建Java Project, 项目名称:Transient)
News.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "news_table")
public class News { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "news_title", length = 50)
private String title; @Transient
private String content; public News() {
}
// getter
// setter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
#2. 使用@Enumerated修饰枚举类型的Field(Net Beans创建Java Project, 项目名称:Enumerated)
Season.java
package org.crazyit.model;
public enum Season {
Spring,Summer,Autumn,Winter
}
News.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "news_table")
public class News { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "news_title", length = 50)
private String title; private String content; @Enumerated(EnumType.ORDINAL)
@Column(name = "happen_season")
private Season happenSeason; public News() {
} public News(int id, String title, String content, Season happenSeason) {
this.id = id;
this.title = title;
this.content = content;
this.happenSeason = happenSeason;
} // getter
// setter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
#3. 使用@Lob, @Basic修饰枚举类型的Field(Net Beans创建Java Project, 项目名称:Lob)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "person_name", length = 50)
private String name; @Lob
@Basic(fetch = FetchType.LAZY)
private byte[] pic; public Person() {
} public Person(int id, String name, byte[] pic) {
this.id = id;
this.name = name;
this.pic = pic;
} // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java
package lee; import javax.persistence.*; import org.crazyit.model.*;
import java.io.*; public class JpaQs { private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("qs"); public static void main(String[] args) throws IOException {
final EntityManager em = emf.createEntityManager(); File file = new File("img.png");
byte[] content = new byte[(int) file.length()];
new FileInputStream(file).read(content); Person person = new Person();
person.setName("crazyit.org");
person.setPic(content); try {
em.getTransaction().begin();
em.persist(person);
em.getTransaction().commit();
}
finally {
em.close();
}
}
}
#4. 使用@Temporal修饰枚举类型的Field(Net Beans创建Java Project, 项目名称:Temporal)
Person.java
package org.crazyit.model; import javax.persistence.*; import java.util.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "person_name", length = 50)
private String name; @Temporal(TemporalType.DATE)
private Date birth; public Person() {
} public Person(int id, String name, Date birth) {
this.id = id;
this.name = name;
this.birth = birth;
} // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
2. 将实体映射到多个数据表(Net Beans创建Java Project, 项目名称:SecondaryTable)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
@SecondaryTable(name = "person_detail", pkJoinColumns = @PrimaryKeyJoinColumn(name = "person_id"))
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "person_name", length = 50)
private String name; @Column(table = "person_detail", name = "email")
private String email; @Column(table = "person_detail", name = "phone")
private String phone; public Person() {
} public Person(int id, String name, String email, String phone) {
this.id = id;
this.name = name;
this.email = email;
this.phone = phone;
} // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
3. 映射复合类型的属性(Net Beans创建Java Project, 项目名称:Embedded)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
public class Person { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; @Column(name = "person_name", length = 50)
private String name; @Column(name = "person_email")
private String email; @Embedded
@AttributeOverrides({
@AttributeOverride(name = "name", column = @Column(name = "cat_name", length = 35)),
@AttributeOverride(name = "color", column = @Column(name = "cat_color"))
})
private Cat cat; public Person() {
} public Person(int id, String name, String email, Cat cat) {
this.id = id;
this.name = name;
this.email = email;
this.cat = cat;
} // setter
// getter
}
Cat.java
package org.crazyit.model; import javax.persistence.*; @Embeddable
public class Cat { private String name;
private String color; public Cat() {
} public Cat(String name, String color) {
this.name = name;
this.color = color;
} // setter
// getter
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
4. 映射实体的主键
#1. IdClass (Net Beans创建Java Project, 项目名称:IdClass)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
@IdClass(Name.class)
public class Person { //两个@Id定义了联合主键
@Id
private String first;
@Id
private String last; @Column(name = "person_email")
private String email; public Person() {
} public Person(String first, String last, String email) {
this.first = first;
this.last = last;
this.email = email;
} // setter
// getter
}
Name.java
package org.crazyit.model;
import javax.persistence.*;
public class Name implements java.io.Serializable {
private String first;
private String last;
public Name() {
}
public Name(String first, String last) {
this.first = first;
this.last = last;
}
// setter
// getter
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj.getClass() == Name.class) {
Name target = (Name) obj;
if (target.getFirst().equals(first) && target.getLast().equals(last)) {
return true;
}
}
return false;
}
public int hashCode() {
return first.hashCode() + last.hashCode() * 17;
}
}
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
#2. EmbeddedId (Net Beans创建Java Project, 项目名称:EmbeddedId)
Person.java
package org.crazyit.model; import javax.persistence.*; @Entity
@Table(name = "person_table")
public class Person {
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "first", column = @Column(name = "person_first")),
@AttributeOverride(name = "last", column = @Column(name = "person_last", length = 20))
})
private Name name; @Column(name = "person_email")
private String email; public Person() {
} public Person(Name name, String email) {
this.name = name;
this.email = email;
} // setter
// getter
}
Name.java(参见#1)
persistence.xml(参见12.2)
JpaQs.java(参见12.2)
JavaEE(13) - JPA属性映射的更多相关文章
- JavaEE(14) - JPA关联映射
1. 单向N-1关联映射 2. 单向1-1关联映射 3. 单向1-N关联映射 4. 单向N-N关联映射 5. 双向1-1关联映射 6. 双向1-N关联映射 7. 双向N-N关联映射 1. 单向N-1关 ...
- Touch 方法&属性 映射工具
Touch 方法&属性 映射工具(0.5 版本) 标签 : github 线上后门与接口调试: 原先需要测试一个接口(如Dubbo.DAO), 或为线上留后门, 需要写大量的Web层(Api. ...
- 10.2.翻译系列:使用Fluent API进行属性映射【EF 6 Code-First】
原文链接:https://www.entityframeworktutorial.net/code-first/configure-property-mappings-using-fluent-api ...
- 【EF】Entity Framework实现属性映射约定
Entity Framework Code First属性映射约定中“约定”一词,在原文版中为“Convention”,翻译成约定或许有些不好理解,这也是网上比较大多数的翻译,我们就当这是Entity ...
- JavaEE高级-JPA学习笔记
*JPA概述 *JPA是什么? - Java Persistence API :用于对象持久化的API - Java EE 5.0平台标准的ORM规范,使得应用程序以统一的方式访问持久化层 - JPA ...
- Entity Framework实现属性映射约定
Entity Framework Code First属性映射约定中“约定”一词,在原文版中为“Convention”,翻译成约定或许有些不好理解,这也是网上比较大多数的翻译,我们就当这是Entity ...
- Entity Framework Code First属性映射约定
Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...
- Hibernate持久化类属性映射
Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...
- ReferentialConstraint 中的依赖属性映射到由存储生成的列
ReferentialConstraint 中的依赖属性映射到由存储生成的列 这个问题是由于从表中的外键关系建立错误(可能是由于误改),查看从表的所有外键关系,即可找到问题所在. 问题: 什么是从表? ...
随机推荐
- cocos2d-x V3.0 呼叫加速度计 Acceleration
今天克服了一个问题,我觉得非常酷 哈哈. 今天得到解决cocos2d-x 3.0 呼叫重力加速器问题,上网查了很多资料 发现是不够,不解决这个问题,我不知道如果我使用3.0 这一问题的版本号,但是,这 ...
- Centos memcached的php拓展 管理界面
确定已安装apache 一.安装php5 1.安装libxml2 tar zxvf libxml2-.tar.gz cd libxml2- ./configure --prefix=/usr/loca ...
- 【原创】编写多线程Python爬虫来过滤八戒网上的发布任务
目标: 以特定语言技术为关键字,爬取八戒网中网站设计开发栏目下发布的任务相关信息 需求: 用户通过设置自己感兴趣的关键字或正则表达式,来过滤信息. 我自己选择的是通过特定语言技术作为关键字,php.j ...
- directx11编程中遇到的错误及解决方法
(2016-05-10)xnamath.h 报错: 在标识符"XMConvertToRadians"的前面 报错如下: >d:\program files\microsoft ...
- php学习笔记--高级教程--读取文件、创建文件、写入文件
打开文件:fopen:fopen(filename,mode);//fopen("test.txt","r"): 打开模式:r 仅仅读方式打开,将文件指针指向 ...
- [LeetCode257]Binary Tree Paths
题目: Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree ...
- 构建安全的Xml Web Service系列之如何察看SoapMessage
原文:构建安全的Xml Web Service系列之如何察看SoapMessage 上一篇文章地址:构建安全的Xml Web Service系列一之初探使用Soap头 (5-22 12:53) ...
- PHP关联数组和哈希表(hash table) 未指定
PHP有数据的一个非常重要的一类,就是关联数组.又称为哈希表(hash table),是一种很好用的数据结构. 在程序中.我们可能会遇到须要消重的问题,举一个最简单的模型: 有一份username列表 ...
- spring集成quartz
spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframe ...
- 百度云盘建svnserver步骤
安装tortoisesvn(略) 安装visualsvn(主server您可以使用)(略步骤)例如下面的安装文件夹后,: 注冊百度账号.进入百度云盘页面,建立目录,如mysvn. 下载百度云盘clie ...