1

我有两个表,我想将它们视为 Hibernate/Spring 中的单个模型类,但是它们唯一的关系可以通过第三个表建立。例如...

tableA {  
   id integer <PK>
   username varchar2(25 byte)
}
tableB {
   personID varchar2(15 byte) <PK>
   divisionID integer
   positionID integer
}
tableC {
   personID varchar2(10) <FK>
   username varchar2(25 byte)
}

虽然简单地将 personID 添加为 tableA 中的列会非常好,但情况不允许。但是,我想在休眠中使用一种模型与这些表进行交互,例如下面的模型...

@Entity
@Table(name="tableA")
public class myTable {
   @Id
   @GeneratedValue
   private int id;
   private String username;
   @Formula("(select distinct tableC.personID from tableC where upper(tableC.username) = upper(THIS_.username) and tableC.personID is not null)")
   String personID;
   @Formula("(select distinct tableB.divisionID from tableB where tableB.personID = THIS_.personID)")
   int divisionID;
   @Formula("(select distinct tableB.oositionID from tableB where tableB.personID = THIS_.personID)")
   int positionID;

   //getters, setters, etc...
}

我知道我在这里写它的方式是不可能的,我只是想传达这个想法。当我稍后去保存或更新数据库时,我希望 Hibernate 能够更新每个属性来自的相应表。

我已经探索过使用@Transient、@SecondaryTables 和其他一些方法,但我还没有找到一个很好的方法来完成这项工作。是否可以按照我想要的方式做到这一点?如果是这样,我应该使用什么方法/注释?如果不是,我应该采取什么替代方法?我对 Hibernate 和 Spring 比较陌生,所以请多多包涵。

4

2 回答 2

0

我确信有办法做到这一点;我没有答案给你。

但是您的问题向我表明您没有正确考虑 Hibernate。这是一个 ORM 工具 -对象-关系映射。如果您仍然只考虑表和 SQL,将值加载到原语中,那么 Hibernate 不是正确的工具。

SimpleJdbcTemplate如果您没有将数据映射到的对象,我建议您只使用 Spring而不是 Hibernate。

于 2012-12-10T18:45:16.917 回答
0

看看这个Using multiple tables in persistence

于 2012-12-11T07:12:10.607 回答