我总是看到更多的 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 entities 和 generate 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/