如何使用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应用程序。 恕我直言是获得初始项目设置的最快方法。