首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请参考JPA @Column注解解释一下insertable=false和updatable=false

请参考JPA @Column注解解释一下insertable=false和updatable=false
EN

Stack Overflow用户
提问于 2010-09-27 23:59:16
回答 4查看 168.8K关注 0票数 173

如果一个字段被注释为insertable=false, updatable=false,这不是意味着您不能插入值或更改现有值吗?你为什么要这么做呢?

代码语言:javascript
运行
复制
@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(mappedBy="person", cascade=CascadeType.ALL)
    private List<Address> addresses;
}

@Entity
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    @JoinColumn(name="ADDRESS_FK")
    @Column(insertable=false, updatable=false)
    private Person person;
}
EN

回答 4

Stack Overflow用户

发布于 2017-08-02 01:55:13

另一个示例是在"created_on“列上,您希望让数据库处理日期创建

票数 14
EN

Stack Overflow用户

发布于 2021-04-08 14:51:47

除了前面的回答之外,insertable=false, updatable=false的一个常见用途是保存冗余的数据库查询,从而提高性能。

想象一下,有一个Client类,它有一个父实体。如果您只想检查客户端是否有父级,则只需检查其parent_id列中是否存在值。不需要要求Hibernate获取父实体,可能还有它的所有其他关联,这会导致额外数量的查询:

代码语言:javascript
运行
复制
public class Client {
    @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id")
    private Parent parent;

    @Column(name = "parent_id", insertable = false, updatable = false)
    private UUID parentId;
}

通过上面的设置,parentId字段将简单地获取存储在parent_id列中的任何值,该列仅由父实体编辑/更新。

票数 1
EN

Stack Overflow用户

发布于 2021-06-25 17:45:34

我认为这仅仅意味着:

列是否包含在持久性提供程序生成的SQL INSERT语句中。

参考:https://www.objectdb.com/api/java/jpa/Column

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3805584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档