JPA Annotations – @Temporal

本文深入探讨了在JPA实现中使用Temporal注解的原理与实践,特别是如何解决日期和时间值在Java对象与数据库类型之间的转换问题。通过示例展示了如何声明Temporal类型以映射到特定的数据库类型,并提供了XML配置示例。

Temporal annotation in JPA implementation can only be used with the fields and property get methods. Also, this annotation can be specified for the persistent fields or properties java.util.Data or java.util.Calendar. This annotation is available since the release of JPA 1.0. @Temporal solves the one of the major issue of converting the date and time values from Java object to compatible database type and retrieving back to the application. When Java class declares the fields java.sql.Date or java.sql.Time, then it is compatible with the database types and will not have any issues. But, when we are using the java.util.Date or java.util.Calendar, then we have to specify Temporal types to map the appropriate database types when persisting to the database.

@Temporal Syntax

It can be declared with the following syntax,

1 @Temporal(value)</span>

The valid values are,

  • TemporalType.DATE
  • TemporalType.TIME
  • TemporalType.TIMESTAMP

@Temporal Example

For example,

- See more at: http://www.javabeat.net/jpa-annotations-temporal/#sthash.d7vveKsL.dpuf

@Temporal(TemporalType.DATE)
2 @Column(name = "DATE_COL")
3 private java.util.Date dateCol;

The corresponding XML declaration is:

1 <entity class="Country">
2     <attributes>
3         <basic name="submitDate">
4             <temporal>DATE</temporal>
5         </basic>
6     </attributes>
7 </entity>

It is equivalent of

  • DATE – equivalent of java.sql.Date
  • TIME – equivalent of java.sql.Time
  • TIMESTAMP – equivalent of java.sql.Timestamp
- See more at: http://www.javabeat.net/jpa-annotations-temporal/#sthash.d7vveKsL.dpuf


引用自:http://www.javabeat.net/jpa-annotations-temporal/

@Id @Column(name = "id") @ApiModelProperty("ID") private String id; @Column(name = "code") @ApiModelProperty("项目编号") private String code; @Column(name = "opportunity_code") @ApiModelProperty("商机编号") private String opportunityCode; @Column(name = "name") @ApiModelProperty("项目名称") private String name; @Column(name = "kind") @ApiModelProperty("项目类型") private String kind; @Column(name = "manager_id") @ApiModelProperty("项目负责人工号") private String managerId; @Column(name = "manager_name") @ApiModelProperty("项目负责人姓名") private String managerName; @Column(name = "customer_name") @ApiModelProperty("客户名称") private String customerName; @Column(name = "product_model") @ApiModelProperty("产品型号") private String productModel; @Column(name = "develop_group") @ApiModelProperty("研发组") private String developGroup; @Column(name = "data_status") @ApiModelProperty("数据类型:1 新增,2:更新") private Integer dataStatus; @Column(name = "sync_status") @ApiModelProperty("同步状态:0未同步,1已同步") private Integer syncStatus = 0; @Column(name = "data_time") @Temporal(TemporalType.TIMESTAMP) @ApiModelProperty("项目数据创建或更新时间") private Date dataTime; @Column(name = "create_time") @Temporal(TemporalType.TIMESTAMP) @ApiModelProperty("创建时间") private Date createTime = new Date(); @Column(name = "last_update_time") @Temporal(TemporalType.TIMESTAMP) @ApiModelProperty("最后更新时间") private Date lastUpdateTime = new Date(); 我的实体类时这样的 然后如果是更新操作,data_status设置成“2”,插入的话就为“1”,然后每一次更新或者插入操作sync_status得设置成“0”,然后data_time是更新或者插入都得更新为当前时间,create_time是插入的时候才会有,更新的时候不变,然后last_update_time是插入的时候会有,更新的时候不变,id是插入的时候生成的,更新的时候不变
最新发布
09-30
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.persistence.*; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.Date; import java.util.List; @Entity @Table(name = "lcdp_request") @ApiModel(description = "信用证/预付款统一申请主表") public class LcdpRequest { // ========== 公共字段 ========== @ApiModelProperty("主键ID") @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ApiModelProperty(value = "申请类型(DP/LC)", required = true) @NotBlank @Column(name = "application_type", length = 2) private String applicationType; // DP: 预付款, LC: 信用证 @ApiModelProperty(value = "LCDP编号", required = true) @NotBlank @Column(name = "lcdp_no", unique = true) private String lcdpNo; @ApiModelProperty(value = "采购订单ID", required = true) @NotNull @Column(name = "po_id") private Long poId; // ========== 基础信息块 ========== @ApiModelProperty(value = "单据类型") @Column(name = "app_type") private String appType; @ApiModelProperty(value = "单据日期") @Temporal(TemporalType.DATE) @Column(name = "document_date") private Date documentDate; @ApiModelProperty(value = "分机号码") @Column(name = "ext_number") private String extNumber; @ApiModelProperty(value = "申请人(工号+姓名拼接)", required = true) @NotBlank @Column(name = "requestor") private String requestor; @ApiModelProperty(value = "部门编码", required = true) @NotBlank @Column(name = "dept_code") private String deptCode; @ApiModelProperty(value = "邮箱") @Column(name = "email") private String email; // ========== 采购订单信息块 ========== @ApiModelProperty(value = "采购订单编号") @Column(name = "po_number") private String poNumber; @ApiModelProperty(value = "币种") @Column(name = "currency") private String currency; @ApiModelProperty(value = "供应商") @Column(name = "vendor") private String vendor; @ApiModelProperty(value = "PO金额") @Column(name = "po_amount") private Double poAmount; @ApiModelProperty(value = "采购方") @Column(name = "buyer") private String buyer; @ApiModelProperty(value = "国际贸易术语") @Column(name = "inco_term") private String incoTerm; @ApiModelProperty(value = "付款条款") @Column(name = "payment_term") private String paymentTerm; @ApiModelProperty(value = "百分比") @Column(name = "percentage") private Double percentage; @ApiModelProperty(value = "科目分配类别") @Column(name = "account_assign_category") private String accountAssignCategory; @ApiModelProperty(value = "PO备注") @Column(name = "po_note", length = 1000) private String poNote; // ========== 预付款信息块 (DP类型专用) ========== @ApiModelProperty(value = "请求金额(含税)") @Column(name = "requested_amount_with_tax") private Double requestedAmountWithTax; @ApiModelProperty(value = "预付款优先级") @Column(name = "down_pay_priority") private String downPayPriority; @ApiModelProperty(value = "请求日期") @Temporal(TemporalType.DATE) @Column(name = "requested_date") private Date requestedDate; @ApiModelProperty(value = "付款类型") @Column(name = "payment_type") private String paymentType; @ApiModelProperty(value = "税码") @Column(name = "tax_code") private String taxCode; // ========== 信用证信息块 (LC类型专用) ========== @ApiModelProperty(value = "申请金额") @Column(name = "requested_amount") private Double requestedAmount; @ApiModelProperty(value = "信用证号码") @Column(name = "lc_no") private String lcNo; @ApiModelProperty(value = "开证日期") @Temporal(TemporalType.DATE) @Column(name = "issue_date") private Date issueDate; @ApiModelProperty(value = "开证银行") @Column(name = "issue_bank") private String issueBank; @ApiModelProperty(value = "银行费用") @Column(name = "bank_charges") private String bankCharges; @ApiModelProperty(value = "目的地") @Column(name = "destination") private String destination; @ApiModelProperty(value = "信用证金额") @Column(name = "lc_amount") private Long lcAmount; @ApiModelProperty(value = "信用证保证金") @Column(name = "lc_deposit") private Long lcDeposit; @ApiModelProperty(value = "有效日期") @Temporal(TemporalType.DATE) @Column(name = "expiry_date") private Date expiryDate; @ApiModelProperty(value = "有效地点") @Column(name = "expiry_place") private String expiryPlace; @ApiModelProperty(value = "出发地") @Column(name = "departure") private String departure; // ========== 状态信息块 ========== @ApiModelProperty(value = "状态(审批中/完成等)", required = true) @NotBlank @Column(name = "status") private String status; @ApiModelProperty(value = "当前处理人姓名") @Column(name = "current_owner") private String currentOwner; // ========== 签核信息块 ========== @ApiModelProperty(value = "备注") @Column(name = "remark", length = 2000) private String remark; // ========== 审计字段 ========== @ApiModelProperty(value = "创建时间") @Temporal(TemporalType.TIMESTAMP) @Column(name = "created_at", updatable = false) private Date createdAt; @ApiModelProperty(value = "更新时间") @Temporal(TemporalType.TIMESTAMP) @Column(name = "updated_at") private Date updatedAt; @ApiModelProperty(value = "更新人") @Column(name = "updated_by") private String updatedBy; @ApiModelProperty(value = "版本号(用于乐观锁)") @Version private Long version; @ApiModelProperty(value = "逻辑删除标识") @Column(name = "is_deleted") private String isDeleted; @ApiModelProperty(value = "租户ID", required = true) @NotNull @Column(name = "tenant_id") private Long tenantId; } 这是我的实体类 下面是我的数据库表 差哪一些
08-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值