gpt4 book ai didi

java - 强制 JpaRepository 返回 Clob 的 hibernate 实现而不是 oracle 实现

转载 作者:行者123 更新时间:2023-12-01 18:35:53 25 4
gpt4 key购买 nike

我已经这样定义了 oracle 表:

MYCLASS_ID_PK   (NUMBER(50,0))  |MYCLASS_UUID   (VARCHAR2(50 BYTE)) |PAYLOAD    (CLOB)

我有一个这样定义的 JPARepository:

public interface MyClassRepository extends JpaRepository<MyClass, Long> {

Optional<MyClass> findByUuid(UUID uuid);

}

我有一个这样定义的实体:

...
import java.sql.Clob;
...

@Entity
@Table(name = "foo_myclass")
@NoArgsConstructor
@Getter
@Setter
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(
name = "create_myclass",
procedureName = "CREATE_MYCLASS",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "myClassUuid", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "payload", type = Clob.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "myClassId", type = Long.class)
})
})

public class MyClass {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "myclass_id_pk")
private Long id;

@NotNull
@Type(type = "uuid-char")
@Column(name = "myclass_uuid")
private UUID uuid;


@Lob
@Column(name = "payload")
private Clob payload;

}

我最初在实体类中使用 String 将有效负载链接到 Oracle CLOB。但是,我的字符串大小有点太大,无法由 JPA 和 Oracle 正确处理(通过单元测试确认),Clob 方法允许我解决这个特定问题。

我现在面临的问题是我的 findByUuid(UUID uuid) 返回 MyClass 的实例,其中我的有效负载已通过 oracle.sql.CLOB 而不是 org.hibernate 的实现实例化。 engine.jdbc.ClobProxy 实现。

在某些时候,Clob 的 Oracle 实现给我带来了麻烦,我想避免它。我还想使用 hibernate 实现来实现类似于 https://thoughts-on-java.org/mapping-blobs-and-clobs-with-hibernate-and-jpa/ 中描述的内容。 .

有谁知道如何强制 findByUuid(UUID uuid) 的结果使用 Clob 的 hibernate 实现而不是 oracle 实现?

最佳答案

最后,我意识到我可以使用oracle.sql.CLOB。我希望能够恢复 Clob 的 hibernate 实现的原因之一是,在我的 findByUuid(UUID uuid) 之后,我对返回的 执行了一些操作MyClass 并尝试使用 JPARepository 保存方法将其保存在我的存储库中(这会导致失败,除非我将结果转换为 Clob 的 Hibernate 实现)。

我最终放弃了恢复 Clob 的 hibernate 实现的尝试。并简单地实现了自定义保存方法,如 How to add custom method to Spring Data JPA 所示。 (来自 kenny_k 的评论)在调用 JPA 保存方法之前,我将返回的 oracle.sql.CLOB 转换为 org.hibernate.engine.jdbc.ClobProxy 的实例。

关于java - 强制 JpaRepository 返回 Clob 的 hibernate 实现而不是 oracle 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60046242/

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