2016-02-16 58 views
1

对不起,一个严重陷害的标题问题。使用过程可以从数据库MVC风格中获取数据吗?

但基本上如果我有两个类,员工和地址。 员工具有对地址实例的引用。

Class Employee{ 
    @Id 
    Integer id; 

    @Column(name="Name") 
    private String name; 

    @Column(name="Address") 
    private Id addressId; 

    @ManyToOne(name="Address", referencedColumnName="ID", insertable=false, updatable=false) 
    private Address address; 
} 

现在使用的弹簧休眠, 当我执行类似"Select * from Employee"时,将取回我不仅每个员工记录,但也相应的包含地址的记录。
多数民众赞成是如何做到这一点。我不仅获得了地址ID,还获得了员工每个对象中的地址的完整数据。 所以我可以做一些像employee.getAddress()。getName()

但事情是由于一些奇怪的客户端要求,我们被迫只使用我们的代码中的程序来访问数据和程序依次将来电查询。所以在我们的代码中没有直接查询。 但程序中我们将无法利用spring-hibernate的这个特性。

程序是否可以这样做(返回每个员工对象中每个员工的整个数据)?

回答

1

基本上你可以使用RowMapper了点。你的程序应该返回加入的数据员工和地址。 JdbcTemplate的简单示例:

public List<Employee> getEmployees(){ 
    final String sql = "CALL employees_procedure"; 
    final List<Employee> employees = (Employee) jdbcTemplate.queryForList("CALL employees_procedure", new EmployeeRowMapper()); 

    return employees ; 
} 

public class EmployeeRowMapper implements RowMapper { 
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException { 
     Employee employee= new Employee(); 
     employee.set(rs.getString("e.id")); 
     ... 
     return employee; 
    } 
} 
+0

如果表中的两列有相同的列,比如ID?那我们怎么区分?我的课也有时会相当嵌套。 在我们的项目中,我们说Employee有一个Address的实例有一个国家的实例。 所以我认为我们仍然会在我们的RowMapper实例 中做很多过滤工作吗?有没有更简单的方法,尽管你建议的方法是下一个最好的方法恕我直言! :) – Sarabjeet

+0

**另外如果一名员工被映射到两个地址。在这种情况下如何解决过滤和映射问题?** – Sarabjeet

+1

您应该设置像Employee e JOIN Address a这样的表别名,然后像我写的那样设置getInt(“e.id”)。无论如何,当你用hibernate查询它时,它会执行相同的嵌套连接,所以它们会在你的过程中。 –

相关问题