一个创建函数可以使用 EntityManager (JPA) 处理任何类型的对象吗?
Posted
技术标签:
【中文标题】一个创建函数可以使用 EntityManager (JPA) 处理任何类型的对象吗?【英文标题】:Can one create function handle any kind objects using EntityManager (JPA)? 【发布时间】:2017-07-23 13:55:19 【问题描述】:以下代码使用JPA和Spring,可以在“游戏”表中创建一行。
@Repository
@Transactional
public class GameDao
/**
* Save the game in the database.
*/
public void create(Game game)
entityManager.persist(game);
return;
// An EntityManager will be automatically injected from entityManagerFactory
// setup on DatabaseConfig class.
@PersistenceContext
private EntityManager entityManager;
看着这个创建函数,我想知道它是如何找到它应该插入的表的?
如果它只能从参数类型(游戏游戏)中找出表,我可以创建一个名为 CreateDao 的类并从那里进行所有创建操作吗?
【问题讨论】:
不确定我是否完全理解这个问题。它找到了这个表,因为 Game 被添加到了 persistence.xml 文件中,并且它被注释了@Entity
并且可能类似于 @Table(name = "game_tbl")
。理论上,是的,您可以创建 1 个通用 DAO,但您必须严重依赖 Java 泛型。
回答你的第二个问题,你可以在这个博客中找到一个很好的例子:NetBeans to Generate Simpler RESTful Web Services。使用它或查看AbstractFacade<T>
类的实现
Single DAO & generic CRUD methods (JPA/Hibernate + Spring)的可能重复
【参考方案1】:
查看Game
类的源代码——它应该用@Entity
注释,可能还有@Table
——它定义了实际的数据库表。
所以,答案是否,不是类名 - GameDao
负责接线。
【讨论】:
GameDao是怎么接线的?带注释?以上是关于一个创建函数可以使用 EntityManager (JPA) 处理任何类型的对象吗?的主要内容,如果未能解决你的问题,请参考以下文章
不允许在共享 EntityManager 上创建事务 - 使用 Spring 事务或 EJB CMT
如何在 Symfony 单命令应用程序中访问 EntityManager?