我有一个场景,我必须在运行时创建我的hibernate实体类并持久化这些实体,而无需重新启动/重新部署我的应用程序。我可以生成实体源(.java)并在运行时使用Java-Poet和Open-HFT库将它们编译为字节代码(.class)。
但我无法在运行时将生成的实体添加到持久性单元。当我试图坚持它时,我得到未知的实体错误。但是我可以在运行时获取并设置它的值。下面的代码适用于手动创建并在应用程序启动之前存在的实体。但不适用于在运行时生成的那些。
Class<?> clazz = Class.forName("com.mrg.domain.User");
Object model = clazz.newInstance();
model.setName("Name");
model.setSurname("Surname");
entityManager.persist(model); // getting error here..
java.lang.IllegalArgumentException: Unknown entity: com.mrg.domain.User
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1184) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
我知道有一些工具可用于生成实体源文件,如eclipse-link和hibernate reverse engineering tools,但我发现它们没有为此提供运行时解决方案。你能建议我在运行时将生成的实体添加到持久化上下文的方法吗?