java - 使用存储过程、JPA 和 Hibernate 保留到 SQL Server 2008

标签 java sql-server hibernate orm jpa

我们正在实现一个网页来维护组织结构。该结构存储在 SQL Server 2008 中并使用新的 HierarchyID 数据类型。因为我们在让 JPA 和 Hibernate 处理这种新数据类型时遇到问题,所以我们决定使用 View 和存储过程来抽象这种数据类型。因此,我们希望使用存储过程来保存我们的实体,但如何使用 JPA 来实现这一点尚不清楚。

首先,我们是否采取了正确的方法,其次,是否可以使用存储过程来持久化用 JPA 注释的实体?

最佳答案

Firstly, are we taking the correct approach [...]

嗯,这要看情况。如果您不介意与数据库引擎绑定(bind),那么我想想要从 HierarchyID 等专有功能中受益并不是完全错误的。但您不必必须使用新功能...

secondly, is it possible to use stored procedures to persist entities annotated with JPA?

据我所知,没有。您可以使用“ native 查询”调用存储过程(请参阅 @NamedNativeQuery 和/或 EntityManager#createNativeQuery() ),但不能使用它们来持久化实体,至少不能使用 JPA。如果您不介意使用 Hibernate 扩展,请查看 @SQLInsert(callable=true, ...) (请参阅 Hibernate Annotations 文档的 2.4.11. Custom SQL for CRUD operations 章)。

<小时/>

就我个人而言,我发现仅仅使用 HierarchyID 创建 View 、存储过程以及处理 JPA 扩展非常麻烦。新功能很酷……当它们确实简化了事情时,而不是当它们增加了更多复杂性时(这里的情况就是这样)。换句话说,因为使用 HierarchyID 并不能真正解决任何问题,所以我想我宁愿坚持使用经典的 parent_id 列(这将使更改数据库引擎更加流畅,即使这是一个非常不可能的事件)。

关于java - 使用存储过程、JPA 和 Hibernate 保留到 SQL Server 2008,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1754747/

相关文章:

java jsscrollpane

java - Runtime.getRuntime().exec ("path to file") 运行,但程序行为奇怪

java - hibernate 应该为每个表使用唯一的序列吗?

java - 基本 Hibernate/JPA 映射问题

javascript - 为什么可以从 JS-ScriptEngine eval(String) 执行 Java 代码?

java - 为什么java源文件需要包声明?

SQL性能: WHERE vs WHERE(ROW_NUMBER)

sql-server - 在一个查询中填充两个变量

java - 没有收到电子邮件

spring - 内存数据库未创建但日志显示执行了DDL