gpt4 book ai didi

java - 使用 JPA 访问没有唯一 id 的 View 返回 null

转载 作者:行者123 更新时间:2023-11-30 06:39:52 24 4
gpt4 key购买 nike

我正在使用 JPA 并且有一个我想要访问的 View 。我在许多其他类中使用带有嵌入式 Id 的映射实体来访问具有类似要求的表。然而,只要 View 中包含 id 的 null 值,整个对象就会以 null 的形式返回。当我查询时返回了正确数量的实体,但它们为空。

以下是类(class):

{
@Entity
@Table(name = "VW_PRODUCT")
public class VwProduct implements Serializable {
@EmbeddedId
private VwProductId id;

public VwProduct() {
}
}

{
@Embeddable
public class VwProductId implements java.io.Serializable {

@Column(name = "PROD_NAME", nullable=true)
private String prodName;
@Column(name = "PROD_CTGRY", nullable=true)
private String prodCtgry;
@Column(name = "PROD_SBCTGRY", nullable=true)
private String prodSbctgry;
}

我省略了 getters、setters 和 hashcode 之类的东西,但我认为我的问题很清楚;当该 View 的某些值为空时,如何访问该 View ?谢谢!

最佳答案

如果主键列为空,则对该列的搜索将始终不返回任何对象。

我知道三种可能的解决方案,按复杂性/古怪的顺序排列。 (对于不使用只读 View 的人,请勿执行以下任何操作。您会用一把非常大的霰弹枪打掉您的脚。)

最简单的答案是更改 View 的定义并添加 rowid 或生成的序列之类的内容,然后将其设为主键。

第二个答案是特定于实现和特定于 hibernate 的,是有一个主键 @ID @ROWID String id;

最后一个答案更复杂,是将所有三个字段映射到“NullableString”UserType,并使用映射 null 的 nullSafeGet 到非空的东西,比如 '' 或其他东西。您会得到重复项,但由于这是只读 View ,因此您并不关心。

关于java - 使用 JPA 访问没有唯一 id 的 View 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com