我正在使用Hibernate 4.3.6
我有一个名为StudyCase的实体映射到名为StudyCase的数据库中的表
,我还得到了另一个实体名称Measurement,用数据库中的表格调用了Measurement。每个StudyCase对象都可以与许多Measurement对象相关联,问题是这个。
我想在一个名为mergedEntity的新实体中映射两个表,并使用来自两个表的列查询它,结果将是具有一对一关系的对象列表与具有相同约束的Measurement对象一起但也将分配他们所属的StudyCase对象的信息。
我在春季jpa做了类似的工作:
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实现相同的功能。 谢谢 !
答案 0 :(得分:0)
使用Hibernate Documentation所说的,你必须这样做
@Entity
public class Troop {
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk")
public Troop getTroop() {
...
}
这会产生双向关系
答案 1 :(得分:0)
是使用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
}
现在使用Hibernate查询您可以编写如下的查询
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();
希望以上示例将帮助您 一切顺利!!!
答案 2 :(得分:0)
最后我最终使用了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)) ;