【发布时间】:2014-10-06 11:56:04
【问题描述】:
我想实现从 JPA 到 Spring JDBC 的关系。例如,假设我有 Account 和 Advert 对象。根据 JPA,Account 和 Advert 之间的关系是 @OneToMany。
帐户类别:
public class Account {
private Long id;
private String username;
private Set<Advert> adverts = new HashSet<Advert>();
// getters + setters
}
广告类:
public class Advert {
private Long id;
private String text;
private Account account;
// getters + setters
}
AccountMapper:
public class AccountMapper implements RowMapper<Account> {
public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
Account account = new Account();
account.setId(rs.getLong("id"));
account.setUsername(rs.getString("username"));
return account;
}
}
现在,我正在尝试为 Advert 类创建一个映射器。如何将帐户变量从 Advert 类映射到一行?非常感谢
【问题讨论】:
-
如果您需要关系映射,最好使用一些 ORM 框架,例如 Hibernate。您可以在 Spring JDBC 中手动进行映射,但这可能会导致 N+1 Select 问题,或者您应该仔细重写所有查询并使用依赖关系连接实体,而且映射器会复杂得多。
-
谢谢你的回答伙伴。我以前使用过 ORM 框架,但现在我正在开发一个更复杂的系统,并且由于其性能,我被建议使用 Spring JDBC。
-
@user1516873 N+1 选择问题是一个设计问题,无论是否使用 ORM 都可能发生。恕我直言,快速设计的 ORM 请求比 JDBC 请求更常见,因为所有请求都必须是显式的。
-
@VladMatvei 我不想坚持太多,但我认为您应该考虑其他解决方案。如果您的应用程序有这么多用户,以至于 Hibernate 成为瓶颈(并且您优化了它的所有查询),那么您可能已经考虑使用可扩展的 NoSQL 数据库。否则,只需启用 Hibernate 的缓存机制或更改您的查询。
标签: java spring hibernate jpa jdbc