java - JPA 与旧版 native SQL 共存

标签 java jpa orm

我总是看到更多的 Java Web 应用程序使用 ORM 框架将实体映射到数据库,并且显然使对象的序列化变得更容易。

这看起来不错,通常涉及很多代码,例如:

@Entity
@Table(name="Flight")
public class Flight implements Serializable {
    Long id;

    @Id
    public Long getId() { return id; }

    public void setId(Long id) { this.id = id; }
}  

上面将 Flight POJO 映射到名为 Flight 的数据库表,这对于从头开始设计的新应用程序来说似乎相当合理。

但是,当必须使用遗留表和逻辑来开发应用程序时,使用 JPA 等 ORM 解决方案是一个可行的解决方案吗?

换句话说,是否可以同时使用 ORM 表和旧表?如何将旧表映射到 POJO?

我见过类似的问题,例如 legacy tables to jpa2 entitiesgenerate object @entities from database,但是它们都谈论将表“逆向工程”为对象的工具。难道不应该有一个选项可以手动完成,一旦正确映射就让 ORM 框架管理它们吗?这一切似乎都是黑客在做我所要求的事情,但是在我看来,将遗留数据库转换为 ORM 管理的数据库应该是规则。

谢谢

最佳答案

是的,您可以对现有数据库使用 ORM。我不知道现在 JPA 有多灵活(没有跟上所有规范的更改),但我知道 Hibernate 在将对象与现有表匹配时非常灵活(支持各种传统配置)。没有什么可以阻止您并行使用 ORM 和直接 JDBC(如果您通过两个 channel 管理更新,可能会出现一些同步问题)。事实上,对于某些场景,直接 JDBC 可能是有意义的(例如临时报告)。再说一次,我不确定 JPA 提供了什么,但我确实知道 hibernate Session 允许您访问底层 JDBC 连接,以便您可以在需要时运行 native SQL。

关于java - JPA 与旧版 native SQL 共存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741261/

相关文章:

java - 如果 ParseUser 正在查看自己的帖子,则菜单项仅出现在操作栏中

java - 如何决定关联表是否需要单独的实体和 DAO?

java - JPA 乐观锁版本处理 - 版本值应该传送到客户端还是?

java - 带部分键的 Hibernate 查询

php - Symfony 如何验证 EntityType 字段

Java 按引用传递构造函数

java - 截去小数点

spring - 如何在过去设置@CreatedDate(用于测试)

java - 继承的 EJB3 应用程序的性能优化策略

java - 如何对 JPA 查询进行分页