Hibernate映射一类两个表(这两个表具有多对一的关系)
我使用Hibernate 4.3.6
我有一个名为StudyCase一个实体映射与数据库中的表称为StudyCase ,我也有一个其他实体名称与数据库调用的测量表中映射的测量。每个StudyCase对象都可以与许多Measurement对象关联,问题是这样的。 我想将这两个表映射到一个名为mergedEntity的新实体中,并使用来自两个表的列进行查询,结果将成为与具有相同约束的Measurement对象具有一对一关系的对象的列表,但也将具有为他们所属的StudyCase对象分配了信息。春天JPAHibernate映射一类两个表(这两个表具有多对一的关系)
我做了一些工作simmilar:
public List<MergeObject> searchMeasurement(String actualConditions)
{
jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "select * from Measurement INNER JOIN StudyCase ON Measurement.study_case_number=StudyCase.study_case_number where "+actualConditions ;
List<MergeObject> result = this.jdbcTemplate.query(sql, new BeanPropertyRowMapper<MergeObject>(MergeObject.class)) ;
return result ;
}
有什么办法,我可以使用Hibernate实现同样的事情。 谢谢!
使用的是什么Hibernate文档说,你所要做的
@Entity
public class Troop {
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk")
public Troop getTroop() {
...
}
这使得双向关系
是使用Hibernate,您可以创建模型/实体对象,如下面
@Entity
@Table(name="StudyCase")
public class StudyCase {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name="study_case_number")
private Long study_case_number; //You might try to use Integer of String as per your requirement
... getter setter
}
@Entity
@Table(name="StudyCase")
public class Measurement {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@ManyToOne
@JoinColumn(name="StudyCase")
private StudyCase studyCaseId
... getter setter
}
现在使用休眠查询您可以编写如下的查询
String sql = "from Measurement as measurement "
+ "inner join measurement.studyCaseId as studyCaseId "
+ "where studyCaseId.study_case_number= :studyCaseNumber";
Query query = getCurrentSession().createQuery(sql);
query.setParameterList("studyCaseNumber", studyCaseNumberLong);
List<Measurement> measurementList = query.list();
希望以上例子将帮助你 一切顺利!
感谢您的帮助,但我认为您可能错过了这里的观点!我所问的不是如何在两个实体之间创建两个很多的关系,而是问是否可以创建一个具有两个实体的文件的对象,并且服务器只是查询过度的。例如,让我们假设存在一个研究案例对象和5个与它关联的Measurement对象,当我想要查询的结果时可以得到5个类型为(mergeObject)的对象,这些对象将重复Studcase对象的字段测量结果的5倍不同的值。 – asdfsarandom
你能告诉我我在这里错过了什么? – Dev
对不起,我正在尝试这是很难解释accuretly! – asdfsarandom
最后我最终使用spring-jpa,但以更紧凑的方式,我会说。 这里是额外的代码:
private DriverManagerDataSource dataSource;
private JdbcTemplate jdbcTemplate;
我涂蜡的方法手动初始化数据源:
public void initDataSource()
{
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=testdb" ;
Properties properties = new Properties() ;
properties.setProperty("username", "actualUsername") ;
properties.setProperty("password", "actualpassowrd") ;
properties.setProperty("driverClassName", "com.microsoft.sqlserver.jdbc.SQLServerDriver") ;
properties.setProperty("dialect", "org.hibernate.dialect.SQLServerDialect") ;
dataSource = new DriverManagerDataSource(url, properties) ;
}
,我用它像这样:
initDataSource() ;
jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "select * from Measurement INNER JOIN StudyCase ON Measurement.study_case_number=StudyCase.study_case_number where " ;
List<DaoObject> result = this.jdbcTemplate.query(sql, new BeanPropertyRowMapper<DaoObject>(DaoObject.class)) ;
我有一个类似的要求我想将两个表格(其中有一对多关系)映射到一个类别来处理结果。这些表已经创建(通过第三方应用程序),我想从两个表(即非规范化视图)中获取数据并进行一些处理。我希望这是有效的用例。尝试使用但它没有给出结果。直接在DB上触发时生成的HQL查询正常工作。 –
angel