我想保留一个显示用户创建时间的列。永远不应该编辑该值。 JPA和SQL中是否存在任何机制,因为除非完全删除该行,否则不允许任何更改。我可能过于担心这个。我在java中使用了最终值,所以我认为在SQL中可能有类似的东西
@Temporal(TemporalType.TIME)
@Column(name = "created_date")
private Date creationDate = new Date();
答案 0 :(得分:0)
虽然可以做到,但SQL中并没有这种机制。通常,创建日期只是在创建行时自动分配,您不必担心以后更新它。只是不要更新它。您可以通过在存储过程中执行所有更新来进一步强制执行此操作,这就是我通常编写此类代码的方式。
当然,您仍然可以担心此类更新。 “内置”解决方案是使用更新触发器来阻止新值进入字段。另一种解决方案是在表上创建一个视图,并且只允许通过视图访问该表。然后,视图可以使列不可更新,如:
create view v_table as
select col1, col2, . . ., (CreatedAt + interval 0 second) as CreatedAt
from table t;
应用函数应该使列不可更新。当然,特定的语法取决于数据库。
并且,特定数据库可能具有执行此操作的特定机制。当我看到这个问题时,它没有数据库标签。
编辑:
在Oracle中,您可以在列级GRANT
和REVOKE
执行此操作。