如何在运行时以编程方式创建JPA实体

时间:2018-06-19 09:10:52

标签: java hibernate jpa hibernate-mapping

我正在寻找一种在运行时定义JPA类的方法,并根据这些定义创建一个EntityManagerFactory。我一直在研究ORM 2.1模式,如果这种方法与此类似,那将是一件好事。 即而不是引用persitance.xml中的xml文件,我们将在引导EMF时提供具有相同定义的对象。

我对其他建议持开放态度,比如用Javassist创建类并将它们传递给bootstrapping过程。

这是一个OSGI项目,因此任何定义都将在运行时通过配置传递,也可以更新,即EMF和类应该能够在运行时被销毁和重新启动。

最好能够定义javax.validation注释或等效于字段。

这样的事情:

public EntityManagerFactory getEntityManagerFactory(Class<?> contextClass, PersistenceUnitInfo info,
        Map<String, Object> properties) {


Entity user = new Entity("User"); //Class name
user.setId("USER_ID", Strategy.SEQUENCE);
Attribute userName = new Attribute();
userName.setName("name");
userName.setAttributeType("String");

Attribute userAge = new Attribute();
userAge.setName("age");
userAge.setAttributeType("Integer");

user.addAttribute(userName);
user.addAttribute(userAge);


Entity phoneNumber = new Entity("PhoneNumber");
phoneNumber.setId("PHONE_NUM_ID", Strategy.SEQUENCE);
Attribute phoneNumberNo = new Attribute();
phoneNumberNo.setName("phoneNumber");
phoneNumberNo.setAttributeType("Integer");

Attribute phoneToUser = new Attribute();
phoneToUser.setName("owner");
phoneToUser.setTargetEntity(user);
phoneToUser.setJoinColumn("USER_ID");

List<Entity> entities = new ArrayList();
entities.add(user);
entities.add(phoneNumber);
properties.put("entityMapping",entities);


EntityManagerFactory emf = persistenceProvider.createEntityManagerFactory( info, properties );
    return emf;
}

0 个答案:

没有答案