如何使用Spring 3配置JPA?
我一直在阅读spring的文档,但我必须说它有点混乱,给出了如何配置JPA的几个不同选项。
使用弹簧3配置JPA 2(使用hibernate)的最佳方式和方法是什么? 如果你有一个pom,web.xml,applicationContext.xml和任何需要的java代码的例子,请你也发布它。
谢谢!
我使用EclipseLink,但配置必须非常相似。 这里有最重要的部分。
pom.xml中:
org.springframework spring-orm ${org.springframework-version} org.eclipse.persistence eclipselink 2.0.1 javax.persistence javax.persistence 2.0.0
persistence.xml中:
的applicationContext-dao.xml:
false
User.java:
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Integer id; private String name; // Getters and setters }
UserDao.java:
@Repository public class JpaUserDao implements UserDao { @PersistenceContext private EntityManager em; @Override public Item get(Integer id) { return em.find(User.class, id); } }
UserService.java:
@Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Transactional @Override public User getUser(Integer id) { return userDao.get(id); } }
希望能帮助到你。
或者,Spring 3+和JPA 2.0可以在动态代理的帮助下集成。
您可以在此处找到所有文档和下载示例
在这种情况下,具有命名JPA查询的接口用于执行查询。 在动态代理的帮助下,接口被视为普通的Spring bean。 它们可以以相同的方式注入(或自动装入)任何其他bean。
查询也可以位于单独的orm-mapping.xml文件中,并按域(或在您方便时)拆分。 这为持久层提供了高度的灵活性和可维护性。
public interface OrganisationQueries { @Query(named = "find.organisation.by.role.id") public Organisation findOrganisationByRoleId(Long roleId); @Query(named = "find.all.organisations") public List findAllOrganisations(); } public class OrganisationServiceImpl implements OrganisationService { @PersistenceContext private EntityManager em; @Autowired private OrganisationQueries organisationQueries; @Override public Organisation findOrganisationByRoleId(Long roleId) { return organisationQueries.findOrganisationByRoleId(roleId); } @Override public List findAllOrganisations() { return organisationQueries.findAllOrganisations(); } }
我建议你看一下Spring Roo,它会创建一个Spring web项目以及所需的pom和所有配置文件(例如JPA)。 如果你不喜欢Roo,你可以放弃它并像往常一样威胁项目Spring Web应用程序。 恕我直言是获得初始项目设置的最快方法。
- 为什么在Dao设计模式或其他设计模式中使用接口
- Hibernate @Where子句
- Spring3 / Hibernate3 / TestNG:一些测试给出了LazyInitializationException,有些则没有
- 简单的hql命名查询,它使用内连接
- Propagation.REQUIRES_NEW不会在Spring中使用JPA创建新事务
- 未设置’hibernate.dialect’时,连接不能为空
- java.lang.ClassCastException:java.lang.Class无法强制转换为java.lang.reflect.ParameterizedType
- 转换Spring Data JPA Page内容的类型
- 如何构建一个动态查询,该查询添加了迄今为止的天数,并使用条件API将该日期与另一个日期进行比较?