如果对字段进行了注释insertable=false, updatable=false
,这是否意味着您不能插入值或更改现有值?你为什么想这么做?
@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;
}
当创建/更新相关实体的 责任 不在 当前
实体中时,您可以这样做。例如,您有一个Person
和一个Address
。您想添加与实体中实体insertable=false, updatable=false
的@OneToMany
关系,只是因为创建或更新并不是实体的责任。相反。Person``Address``Address``Person
我正在使用 Oracle 数据库,我有序列和触发器用于在插入之前生成和存储 ID。 然后我有一个带有属性的简单实体: ...当我尝试构建项目时,我得到: 当我删除可插入或可更新的关键字时,它可以工作。我知道有很多解决方案如何使用 JPA 生成 ID,JPA 也可以使用(调用)预言机序列来设置(生成)ID。但我试图理解为什么我的解决方案是错误的。为什么我不能将这两个关键字与@Id注释一起使用?我的想
简而言之,我在数据库中有一列是这样设置的: 这样的实体: 当我像这样合并一个新实体时: 不会将field与数据库同步。它将显示<code>0</code>。我如何强制所有JPA更新数据库设置的本质上是不可变字段的内容? 其目的是创建日期字段。但还有其他场景,如由触发器设置的DB字段。。。
问题内容: 如果我将字段定义为不可更新,这是否意味着该字段永远无法更新?我想做的是在保存整个实体对象时防止字段更新,但仍然能够编写显式更新此字段的查询。这可能吗? 我正在使用Hibernate和MySQL,但我更愿意编写可移植的代码。 问题答案: 作为记录,设置只影响SQL UPDATE语句 产生 的持久性提供: 该列是否包含在持久性提供程序生成的SQL UPDATE语句中。 您仍然能够编写这样的
问题内容: 和JPA持久性之间有什么区别? 问题答案: Gordon Yorke(EclipseLink体系结构委员会成员,TopLink核心技术负责人,JPA 2.0专家组成员)在此主题上写了一个很好的答案,因此,我不用表述他,而是引用他的答案: 和 之间的区别是评估它们的范围。’ ‘ 的定义讨论了属性和字段值,并建议应在运行时内评估此功能。“ ”仅指数据库列。 如果实现选择实现,则这些属性应由
问题内容: 尝试序列化作为JPA实体的ESRBRating对象时,我遇到了两个不同的堆栈跟踪(请参见下文)。我正在使用Spring DataJPA。控制器称为服务,服务称为存储库。通过在我的ESRBRating对象上添加@Proxy(lazy = false),我能够解决此问题。 我的主要问题是@Proxy(lazy=false)实际做什么?为什么添加时起作用?这是一个好的解决方案,还是会产生诸如
问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所有