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

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

Stack Overflow用户
提问于 2010-09-27 23:59:16
回答 8查看 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

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-09-28 00:10:45

当创建/更新被引用列的responsibility不在当前实体中,而在另一个实体中时,可以这样做。

票数 141
EN

Stack Overflow用户

发布于 2010-09-28 03:51:41

当您需要在一个实体中多次映射一个字段时,定义insertable=false, updatable=false非常有用,通常是:

使用复合密钥时使用

  • 在使用cascaded primary keys

时使用复合密钥

这不是一个语义上的东西,但绝对是一个技术上的东西。

票数 128
EN

Stack Overflow用户

发布于 2013-04-23 17:03:14

对于BalusC和Pascal Thivent的回答,我想补充一下insertable=false, updatable=false的另一种常见用法

考虑一列,它不是id,而是某种类型的序列号。计算序列号的责任可能不一定属于应用程序。

例如,序列号从1000开始,每个新实体都应递增1。在数据库中很容易做到这一点,而且非常恰当,在这种情况下,这些配置是有意义的。

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

https://stackoverflow.com/questions/3805584

复制
相关文章

相似问题

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