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 中的依赖属性映射到由存储生成的列 这个问题是由于从表中的外键关系建立错误(可能是由于误改),查看从表的所有外键关系,即可找到问题所在. 问题: 什么是从表? ...
随机推荐
- 将jar要么aar公布到到网mvn 在(使用github作为仓库), 通过gradle dependency 信息集成
使用Android Studio用户开发,都希望通过maven该方式整合远程仓库jar.aar文件.但如何将这些文件发布它? 发人员都会将jar文件公布到sonatype上,以提供给其它开发人员集成, ...
- Linux新手命令
给老婆写了一份速成培训教材--最经常使用的命令及解释.当然每一个人工作内容不同,经常使用命令也不同,这仅仅是我的个人经验,并且要考虑到接受者的基础. ls:列出文件夹下的内容,类似于dos下的dir. ...
- ffmpeg架构和解码流程分析
转 一,ffmpeg架构 1. 简介 FFmpeg是一个集录制.转换.音/视频编码解码功能为一体的完整的开源解决方案.FFmpeg的 开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用 ...
- selinux 工具下载地址
http://userspace.selinuxproject.org/releases/ 里面包含了 Name Last modified Size Description Parent Direc ...
- 【原创】leetCodeOj ---Partition List 解题报告
原题地址: https://oj.leetcode.com/problems/partition-list/ 题目内容: Given a linked list and a value x, part ...
- 【Linux探索之旅】第二部分第一课:终端Terminal,好戏上场
内容简介 1.第二部分第一课:终端Terminal,好戏上场 2.第二部分第二课预告:命令行,世界尽在掌握 终端Terminal,好戏上场 随着第一部分的结束,我们进入了第二部分(小编你这好像是废话. ...
- Python 显示LinkedIn用户作业
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-18 @author: guaguastd @name: j ...
- Apidemos-->Views-Lists-Cursor(people)学�
Apidemos-->Views-Lists-Cursor(people)-主要用到了获取手机联系人信息,属于内容提供者的范畴,要想了解这方面的内容,能够參考官方docs /sdk/docs/g ...
- Web Deploy发布网站及常见问题解决方法(图文)
Web Deploy发布网站及常见问题解决方法(图文) Windows2008R2+IIs7.5 +Web Deploy 3.5 Web Deploy 3.5下载安装 http://www.iis.n ...
- Centos6.5下一个Ceph存储集群结构
简单的介绍 Ceph的部署模式下主要包括下面几个类型的节点 • Ceph OSDs: A Ceph OSD 进程主要用来存储数据,处理数据的replication,恢复,填充.调整资源组合以及通过检查 ...