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 中的依赖属性映射到由存储生成的列 这个问题是由于从表中的外键关系建立错误(可能是由于误改),查看从表的所有外键关系,即可找到问题所在. 问题: 什么是从表? ...
随机推荐
- ORA-00913错误:PL/SQL: ORA-00913: too many values
ORA-00913错误 描写叙述:PL/SQL: ORA-00913: too many values 目标:编写一个能够循环插入数据的脚本 操作过程: SQL> desc tcustmer N ...
- 重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表
原文:重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表 [源码下载] 重新想象 Windows 8 S ...
- android看不见main函数怎么办?程序异常了,能够不提示“xxx软件停止执行”吗?
今天遇到了这个问题,分享一下解决方式. android没有main 函数,自然也就不存在main里面加入异常处理来实现全局异常捕获的方案.那android程序有全局异常补货的解决方式吗? 答案是有的: ...
- 【iOS发展-61】更换plist经过资源,执行iOS一旦数据仍显示在模拟器的外观,如何解决?
(1)案例介绍 --我们首先导入plist文件做项目,模拟的观看效果. --删除plist,更换一个新的plist,CMD+R模拟执行,或者找到该程序界面上显示最后一个数据. (2)原因 是由于第一次 ...
- HDU 2017 一系列统计数据
一系列统计数据 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- VB高清图标制作方法
我隆重介绍一个软件:ResHacker !!! 这个软件可以修改软件的很多东西包括图标和标题,下面看**作. 运行ResHacker打开要更改图标的exe文件, 图标组--1--右键0--替换资源-- ...
- 2014阿里巴巴web前实习生项目分析(1)
以下简化CSS代码: div.container{ width:500px; background-image:url(/img/sprite.png); background-repeat:no-r ...
- 对SA权限的再突破 (对付xplog70.dll被删)转载
原文:对SA权限的再突破 (对付xplog70.dll被删)转载 对SA权限的再突破 (对付xplog70.dll被删)转载 转载自:http://www.bitscn.com/plus/view.p ...
- android--jenkins+gradle+android自动化构建apk步骤(转)
第一步,安装jenkins,这个网上教程挺多的. 第二步,下载并配置gradle.下载地址http://www.gradle.org/ 解压gradle至某路径下,如/usr/local/lib/gr ...
- 【转】Robot Framework 快速入门
目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...