java - 从 JPA/Hibernate 调用 Sybase 存储过程

标签 java hibernate jpa

我需要从 JPA 调用 Sybase 存储过程并将值返回到 Transient 对象中,该对象将用于填充另一个持久对象。

这就是我所做的:

@Entity
public class CBSCustomer {
String cpr;
<--snipped-->

@Id
@Transient
public String getCpr() {
    return cpr;
}

<---snipped-->

}

在bean中调用SP:

List<CBSCustomer> fetchedCustomerList = getEmPhoenix().createNativeQuery("{call sp_name(?)}", CBSCustomer.class).setParameter(1, cprInput).getResultList();

if (fetchedCustomerList.size() > 0) {              
          CBSCustomer cbsCustomer = ((CBSCustomer)fetchedCustomerList.get(0));
          setDisabled(true);
      }

不幸的是,我不断收到有关列名称的错误,即“x 的列名称无效”,其中 x 是 CBSCustomer 中我的字段的占位符。

最佳答案

经过大量测试,这就是我的做法。我希望它可以帮助其他人。

1) 您必须为结果集映射创建一个@Entity POJO,并使用@Transient 注释所有字段。

2)您需要在该类中有一个 @ResultSetMapping 注释,例如

@SqlResultSetMapping(
name="CBSCustomer",
entities={
    @EntityResult(
        entityClass=CBSCustomer.class,
        fields={
            @FieldResult(name="name", column="Name"),
            @FieldResult(name="cpr", column="CPR"),
<--snipped-->
        }
    )
}

3) 现在您可以调用存储过程并使用 createNativeQuery 中的“CBSCustomer”别名将其映射到该字段,例如

createNativeQuery("{call procedure(?)}", "CBSCustomer")

关于java - 从 JPA/Hibernate 调用 Sybase 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490572/

相关文章:

java - 我可以在 for 循环中使用字符串文字吗?

java - 使用hibernate显示数据库中的数据

java - 提交期间的延迟(使用 JPA/JTA)

java - 如何使 JPA @query 与包含另一个投影的投影一起使用

java - 调试 VisualVM 远程连接

java - 在 springBoot 中使用 MongoRepository 进行 MongoDb 查询

java - 获取 EditText 的字符数

java - 在没有 XML 的情况下配置 JPA/Hibernate/PostgreSQL

java - Spring Boot 与 MYSQL 数据库的连接失败(Web 应用程序)

java - map 的 JPA map