我有两个表,我想将它们视为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 :(得分:0)
我确信有办法做到这一点;我没有你的答案。
但是你的问题告诉我你没有正确思考Hibernate。它是一个ORM工具 - 对象 - 关系映射。如果您仍然只考虑表和SQL,将值加载到基元中,那么Hibernate就不是正确的工具。
如果您没有将数据映射到的对象,我建议您只使用Spring SimpleJdbcTemplate
而不是Hibernate。
答案 1 :(得分:0)