我正在使用的数据库有许多具有相同列但具有(显然)不同表名的表(我没有设计它)。例如(这些是数据库表名称):
company1Data
company2Data
company3Data
etc.
是否可以使用JPA和hibernate将这些映射到一个Java类实体?该类的名称为Data
,然后在使用它时将某个地方传递给company1
,以便该对象使用company1Data
表?
或者为这样的事情使用普通的普通Java对象会更好吗?
谢谢!
答案 0 :(得分:1)
从根本上说,这里的问题是一个糟糕的(真的,可怕的)数据库设计。理想情况下,您只需修复此问题。
如果你做不到,我可以看到几种方法。
一种是使用table per class映射为继承建模。您可以使Data
成为一个抽象实体,然后创建映射到每个表的简单具体子类。这样做会有效,但是对于任何不限于特定类的查询都会效率低下,因为它们将涉及查询多个表,并且使用起来会很麻烦,因为您需要为每个表使用特定的类。
另一个是用视图解决这个问题。创建一个视图,它是所有表的并集,然后映射它。这里的问题是你将无法插入其中。你可以用这里的触发器做一些聪明的事情,但它取决于你的数据库,并且比我拥有更多的数据库和JPA魔法!
答案 1 :(得分:0)
在我看来,如果你使用Hibernate,对你来说会更快......
将JPA与Hibernate一起使用的一大优点是你不需要编写一些sql命令,比如插入和更新。
以下是一些可以从Hibernate开始的教程:
http://www.javacodegeeks.com/2012/05/tutorial-hibernate-jpa-part-1.html http://docs.jboss.org/hibernate/orm/3.6/quickstart/en-US/html/hibernate-gsg-tutorial-jpa.html
希望它有所帮助...
以下是有相同问题的人的一些主题:
How to map one class to different tables using hibernate/jpa annotations
JPA, How to use the same class (entity) to map different tables?