需要显示列数据,在date_create类中,有一个注解@Transient。如果删除它,则将显示数据,但将不会在列中输入数据(日期和时间)
例如这是输出:
if(petit.getBlockger2016().getDate_change() != null) { aRow.createCell(46).setCellValue(petit.getBlockger2016().getDate_change().toString());}
else{ aRow.createCell(46).setCellValue(""); }
但是已经有了 Date_create 它显示出空虚
if(petit.getBlockger2016().getDate_create() != null) { aRow.createCell(46).setCellValue(petit.getBlockger2016().getDate_create().toString());}
else{ aRow.createCell(46).setCellValue(""); }
在 SQL 中:
date_change DATE
date_create DATE Default - sysdate
.java
private String date_create;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd kk:mm:ss.S", timezone="GMT+6")
private Date date_change;
@Transient
public String getDate_create() {
return date_create;
}
public void setDate_create(String date_create) {
this.date_create = date_create;
}
public Date getDate_change() {
return date_change;
}
public void setDate_change(Date date_change) {
this.date_change = date_change;
}
@Override
public String toString() {
return "BlockGER2016 [idblockger2016=" + idblockger2016 + ", date_end=" + date_end + ", date_close="
+ date_close + ", letter_out_num=" + letter_out_num
+ ", letter_out_date=" + letter_out_date + ", regsource_id="
+ regsource_id + ", regname=" + regname + ", regnum=" + regnum
+ ", date_create=" + date_create + ", date_change="
+ date_change + ",inbound_from="+ inbound_from +",date_plan_end="+ date_plan_end +",claim_inshur="+ claim_inshur +"typempid="+typempid+" state=" + state + ",filecall ="+ filecall +"]";
}
.jsp
使用@Transient 注解不会输出任何数据
<td> ${petit.blockger2016.date_create}</td>
如果我正确理解你想要什么,那么正确的答案就是这个。
@Transient导致持久性系统完全忽略该属性。它的任何内容都不会保存到数据库中,也不会从数据库中加载任何内容。
因此,你
data_create的总是空的。@Transient不好。如果你想从数据库中加载数据,但不想在那里写,那么做这样的事情那些。指示不要插入或更新字段。但是你仍然可以提取。
但这还不是全部。新条目将具有时间戳,但新对象不会。您需要以某种方式更新新对象,以便他们获得数据库生成的数据。我从来没有对是否有自动化此操作的方法感兴趣,但作为最后的手段,坚持/合并后的标准刷新会有所帮助。
但这在我看来不是很好。
以防万一,我将提供我自己的设置创建/修改时间的版本。
那些。时间戳不是由数据库设置的,而是由应用程序使用特殊的实体生命周期事件处理程序(
@PrePersist和@PreUpdate)设置的。关于 SQL 的几句话
也许不是每个人都知道它的真正含义
date_create DATE Default - sysdate也许有人认为如果你尝试写到
NULL,date_create那么 SQL 会写在那里sysdate?现在,情况并非如此。SQL 乖乖地写在那里NULL:)事实上,
sysdate只有在查询中根本没有提到该字段时才会写它date_create。当没有 ill-fated
@Transient时,大约会形成这样一个对数据库的请求:insert into my_table (id, data_create, name, ...) values (1, NULL, 'вася', ...)或者这样
insert into my_table (id, data_create, name, ...) values (1, '25/06/2021', 'вася', ...),这取决于对象的属性填充了什么。
并且该字段
data_create从请求中获取值,无论它是什么。现在我们放到
@Transientdata_create上,那么request里面会是这样insert into my_table (id, name, ...) values (1, 'вася', ...)data_create的,我们看不到了。数据库也看不到它,并将其写入data_createfielddefault,即sysdate考虑数据从数据库到实体对象的反向流动。
不让
@Transient。然后请求将是select id, data_create, name, ... from my_table这样的 我们看到从数据库中提取了一个字段,
data_create并将其值写入同名对象属性并显示在页面上。我们会再回来
@Transient的。老实说,我不知道hibernate会如何表现,但我想请求会是这样的select id, name, ... from my_table。财产的价值
data_create,即使在原则上,也无处可取。因此,当然,在页面上我们看到的不是废话,而是类似的东西:)