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属性映射的更多相关文章

  1. 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关 ...

  2. Touch 方法&属性 映射工具

    Touch 方法&属性 映射工具(0.5 版本) 标签 : github 线上后门与接口调试: 原先需要测试一个接口(如Dubbo.DAO), 或为线上留后门, 需要写大量的Web层(Api. ...

  3. 10.2.翻译系列:使用Fluent API进行属性映射【EF 6 Code-First】

    原文链接:https://www.entityframeworktutorial.net/code-first/configure-property-mappings-using-fluent-api ...

  4. 【EF】Entity Framework实现属性映射约定

    Entity Framework Code First属性映射约定中“约定”一词,在原文版中为“Convention”,翻译成约定或许有些不好理解,这也是网上比较大多数的翻译,我们就当这是Entity ...

  5. JavaEE高级-JPA学习笔记

    *JPA概述 *JPA是什么? - Java Persistence API :用于对象持久化的API - Java EE 5.0平台标准的ORM规范,使得应用程序以统一的方式访问持久化层 - JPA ...

  6. Entity Framework实现属性映射约定

    Entity Framework Code First属性映射约定中“约定”一词,在原文版中为“Convention”,翻译成约定或许有些不好理解,这也是网上比较大多数的翻译,我们就当这是Entity ...

  7. Entity Framework Code First属性映射约定

    Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...

  8. Hibernate持久化类属性映射

    Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...

  9. ReferentialConstraint 中的依赖属性映射到由存储生成的列

    ReferentialConstraint 中的依赖属性映射到由存储生成的列 这个问题是由于从表中的外键关系建立错误(可能是由于误改),查看从表的所有外键关系,即可找到问题所在. 问题: 什么是从表? ...

随机推荐

  1. poj 2586 Y2K Accounting Bug (贪心)

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8678   Accepted: 428 ...

  2. 【ThinkingInC++】8、说明,浅谈数据类型的大小

    /** * 特征:说明.浅谈数据类型的大小 * 时刻:2014年8一个月10日本11:02:02 * 笔者:cutter_point */ #include<iostream> using ...

  3. SSH三作品的框架和流程

    Hibernate工作的,为什么? 原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xm ...

  4. java程序开发代写(QQ:928900200)

    条件:手机1.2都是安卓智能机,手机1开热点,手机2链接手机1,功能:A手机2通过刷手机网页,登陆手机1设定的页面并下载其手机的指定文件,B手机1控制手机2的流量,当通过的流量多的时候,停止流量的供应

  5. W5500 keep-alive的用途及使用

    大家是否遇到过这种问题,W5500作为server已经建立连接,突然网线掉了,然后再去连接W5500.就连不上了. 为什么?以下对这个问题进行解释说明,并提出解决的方法. 图1中的上位机程序作为cli ...

  6. hdu2993坡dp+二进制搜索

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. DV工作流

  8. 使用SKIP-GRANT-TABLES 解决 MYSQL ROOT密码丢失(转)

    B.5.3.2 How to Reset the Root Password If you have never assigned a root password for MySQL, the ser ...

  9. 使用clojure訪问SQL Server数据库

    (require '[korma.core :as kc]) (require '[korma.db :as kd]) (Class/forName "com.microsoft.jdbc. ...

  10. Android 浏览器开发WebView setBlockNetworkImage本末

    含义本身防止网络数据图片 webSettings.setBlockNetworkImage(true); 停止发布数据 webSettings.setBlockNetworkImage(false); ...