第二百一十九节 JPA 教程 - JPA 字段映射示例

JPA 教程 - JPA 字段映射示例

当将 Java bean 字段映射到数据库列时,我们可以选择标记字段,标记 getter 方法并标记两者。

标记字段

以下代码来自 Professor.java。

它显示如何将主键列标记为 Java bean 字段标识。

复制代码
package cn.w3cschool.common;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Professor {
    @Id
    private int id;
    private String name;
    private long salary;

    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public long getSalary() {
        return salary;
    }

    public void setSalary(long salary) {
        this.salary = salary;
    }

    public String toString() {
        return "Employee id: " + getId() + " name: " + getName() + " salary: " + getSalary();
    }
}

下面的代码来自 PersonDaoImpl.java。

复制代码
package cn.w3cschool.common;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class PersonDaoImpl {
  public void test() {

    Professor emp = new Professor();
    emp.setId(1);
    emp.setName("name");
    emp.setSalary(12345);
    em.persist(emp);

  }

  @PersistenceContext
  private EntityManager em;
}

下载 Access_Field.zip

这里是运行代码后的数据库转储。

复制代码
Table Name: PROFESSOR
 Row:
    Column Name: ID,
    Column Type: INTEGER:
    Column Value: 1

    Column Name: NAME,
    Column Type: VARCHAR:
    Column Value: name

    Column Name: SALARY,
    Column Type: BIGINT:
    Column Value: 12345

标记属性 getter 方法

以下代码来自 Professor.java。

用于标记要用作数据库表主键列的字段的 @Id 注释将添加到 getter 方法。

复制代码
package cn.w3cschool.common;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Professor {
  private int id;
  private String name;
  private long wage;

  @Id
  public int getId() {
      return id;
  }
  
  public void setId(int id) {
      this.id = id;
  }
  
  public String getName() {
      return name;
  }
  
  public void setName(String name) {
      this.name = name;
  }

  public long getSalary() {
      return wage;
  }

  public void setSalary(long salary) {
      this.wage = salary;
  }

  public String toString() {
      return "Employee id: " + getId() + " name: " + getName() + " salary: " + getSalary();
  }
}

下载 Access_Property.zip

以下是在运行上面的代码后的数据库转储。

复制代码
Table Name: PROFESSOR
 Row:
    Column Name: ID,
    Column Type: INTEGER:
    Column Value: 1

    Column Name: NAME,
    Column Type: VARCHAR:
    Column Value: name

    Column Name: SALARY,
    Column Type: BIGINT:
    Column Value: 12345

混合标记

使用 JPA,我们可以标记字段和 getter 方法。

以下代码来自 Professor.java。

复制代码
package cn.w3cschool.common;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;

@Access(AccessType.FIELD)
@Entity
public class Professor {
  public static String LOCAL_AREA_CODE = "999";
  @Id
  private int id;
  @Transient
  private String phoneNum;


  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getPhoneNumber() {
    return phoneNum;
  }

  public void setPhoneNumber(String num) {
    this.phoneNum = num;
  }

  @Access(AccessType.PROPERTY)
  @Column(name = "PHONE")
  protected String getPhoneNumberForDb() {
    if (null != phoneNum && phoneNum.length() == 10)
      return phoneNum;
    else
      return LOCAL_AREA_CODE + phoneNum;
  }

  protected void setPhoneNumberForDb(String num) {
    if (num.startsWith(LOCAL_AREA_CODE))
      phoneNum = num.substring(3);
    else
      phoneNum = num;
  }
}

下面的代码来自 PersonDaoImpl.java。

复制代码
package cn.w3cschool.common;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class PersonDaoImpl {
  public void test() {

    Professor emp = new Professor();
    emp.setId(1);
    emp.setPhoneNumber("123456789");
    em.persist(emp);

  }

  @PersistenceContext
  private EntityManager em;
}

下载 Access_Mixed.zip

复制代码
Table Name: PROFESSOR
 Row:
    Column Name: ID,
    Column Type: INTEGER:
    Column Value: 1

    Column Name: PHONE,
    Column Type: VARCHAR:
    Column Value: 999123456789
相关推荐
晨非辰30 分钟前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
励志码农2 小时前
JavaWeb 30 天入门:第二十三天 —— 监听器(Listener)
java·开发语言·spring boot·学习·servlet
天高云淡ylz3 小时前
子网掩码的隐形陷阱:为何能ping通却无法HTTPS访问
开发语言·php
@小匠3 小时前
Spring Cache 多租户缓存隔离解决方案实践
java·spring·缓存
智码看视界4 小时前
老梁聊全栈系列:(阶段一)架构思维与全局观
java·javascript·架构
黎宇幻生4 小时前
Java全栈学习笔记33
java·笔记·学习
希望20175 小时前
Golang Panic & Throw & Map/Channel 并发笔记
开发语言·golang
朗迹 - 张伟5 小时前
Golang安装笔记
开发语言·笔记·golang
yzx9910135 小时前
生活在数字世界:一份人人都能看懂的网络安全生存指南
运维·开发语言·网络·人工智能·自动化