【JPA】字段访问、属性访问及混合访问

转载:https://www.cnblogs.com/yangchongxing/p/10120318.html

1、字段访问

注解字段,通过反射来获得和设置字段实体,若getter和setter方法存在,那么会忽略他们。也就是说以后的getter和setter方法不会被使用。有一下两种写法,根据个人喜好定。

写法一

@Id private int id;

写法二

@Id
private int id;

2、属性访问

注解方法,getter和setter方法将由程序调用,用于访问和设置状态。有一下两种写法,根据个人喜好定。

写法一

@Id public int getId() {
return id;
}

写法二

@Id
public int getId() {
return id;
}

3、混合访问

同时注解字段和方法,使用@Access注解 覆盖默认的访问模式 或者 数据在读取和写入到数据库的过程中执行一个简单的数据转换。

看一个例子,比如电话phone在写入数据库时要追加区号010-,而表示时却不显示。
首先通过@Access(AccessType.FIELD)显式标记类的访问为字段访问。如果字段和属性都被注解,那么它将是未定义的。
然后通过@Access(AccessType.PROPERTY) @Column(name="phone")注解属性,有意识的区别于默认情况,对数据进行转换格式。
最后通过@Transient把要使用持久化的字段标记为临时的,防止默认的访问规则导致状态被持久化两次。
代码如下:

package cn.ycx.entity;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient; @Entity
@Access(AccessType.FIELD) //显式标记类的默认访问模式为字段访问
public class Employee {
@Id
private int id;
private String name;
@Transient //标记字段为临时的防止被持久化两次
private String phone;
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 String getPhone() {
return "010-" + phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Access(AccessType.PROPERTY)//有意识的区别于默认情况,对数据进行转换格式
@Column(name
="phone")
public String getPhoneForDb() {//存入数据库时追加010-
return "010-" + this.phone;
}
public void setPhoneForDb(String phone) {//从数据库读出时去掉010-
this.phone = phone.substring(4);
}
public long getSalary() {
return salary;
}
public void setSalary(long salary) {
this.salary = salary;
}
}

最新文章

  1. CSS中详解hight属性
  2. Find命令的用法
  3. Java期末设计(十三周)
  4. Nodejs基础:路径处理模块path总结
  5. ubuntu wubi非在线快速安装
  6. TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。
  7. LinkedHashMap实现LRU算法
  8. TCP/IP之TCP的建立与终止
  9. JavaWeb 8 Cookie
  10. iOS 进阶 第十三天(0414)
  11. 多线程lock(instance)中instance的选择.
  12. HTML5 3D翻书效果(双面效应)
  13. HDU 5234 Happy birthday 动态规划(三维数组)
  14. sql server 性能调优之 资源等待SOS_SCHEDULER_YIELD
  15. Linux 查看进程的线程数
  16. sql面试题-----行转列
  17. C# Winform同时启动多个窗体类
  18. 理解Backtracking
  19. Comparable 与 Comparator
  20. linux sh 读取文件内容,if判读语句,变量var打印

热门文章

  1. Tsx写一个通用的button组件
  2. 【Flume】Flume基础之安装与使用
  3. 关于 “'sqlite3' 不是内部或外部命令.....”问题
  4. php5.6开启curl
  5. scrapy_redis分布式爬虫
  6. RabbitMQ的入门学习
  7. python: __future__的介绍
  8. canvas入门,就是这个feel!
  9. AE 新建项目(一)(持续更新,做到哪算哪)
  10. IDEA连接Redis