【JPA】字段访问、属性访问及混合访问
2024-09-01 20:43:30
【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;
}
}
最新文章
- CSS中详解hight属性
- Find命令的用法
- Java期末设计(十三周)
- Nodejs基础:路径处理模块path总结
- ubuntu wubi非在线快速安装
- TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。
- LinkedHashMap实现LRU算法
- TCP/IP之TCP的建立与终止
- JavaWeb 8 Cookie
- iOS 进阶 第十三天(0414)
- 多线程lock(instance)中instance的选择.
- HTML5 3D翻书效果(双面效应)
- HDU 5234 Happy birthday 动态规划(三维数组)
- sql server 性能调优之 资源等待SOS_SCHEDULER_YIELD
- Linux 查看进程的线程数
- sql面试题-----行转列
- C# Winform同时启动多个窗体类
- 理解Backtracking
- Comparable 与 Comparator
- linux sh 读取文件内容,if判读语句,变量var打印
热门文章
- Tsx写一个通用的button组件
- 【Flume】Flume基础之安装与使用
- 关于 “'sqlite3' 不是内部或外部命令.....”问题
- php5.6开启curl
- scrapy_redis分布式爬虫
- RabbitMQ的入门学习
- python: __future__的介绍
- canvas入门,就是这个feel!
- AE 新建项目(一)(持续更新,做到哪算哪)
- IDEA连接Redis