2012-12-10 53 views
1

我有两张表,我想在Hibernate/Spring中将它视为单个模型类,但是他们唯一的关系可以通过第三个表建立。例如...在单个模型中的第三个表上连接两个表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的列,情况不允许。我会,不过,想与这些表在Hibernate中使用一个模型,比如下面的一个互动......

@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相对来说比较新,所以请耐心等待。

回答

0

我相信有一种方法可以做到这一点;我没有你的答案。

但是你的问题告诉我,你没有正确地思考Hibernate。这是一个ORM工具 - 对象-关系映射。如果你仍然只考虑表和SQL,将值加载到基元中,那么Hibernate并不是正确的工具。

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

+0

在试图让我的问题那么简单,我可能过于简化。这只是Hibernate迄今非常有用的一个更大的Web应用程序的一个组件。 – hartz89

+0

你不必为所有事情都使用Hibernate。如果你没有映射到你的域中的模型对象,我会说Hibernate不适用。 – duffymo

相关问题