一个创建函数可以使用 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?

EntityManager 创建本机查询与持久化和注入

不允许在共享 EntityManager 上创建事务 - 使用 Spring 事务或 EJB CMT

如何在 Symfony 单命令应用程序中访问 EntityManager?

如何使用 Jest 在 TypeORM 中存根 EntityManager 和 Connection

使用 EntityManager 进行 Spring Boot 和安全集成测试