Hibernate使用外键创建域实例

时间:2014-02-14 15:27:01

标签: java hibernate jpa reflection

我有这样的域类:

非常简化:

class Person extends Domain {
  Set<Contracts> contracts;

  //...
  @OneToMany(fetch = FetchType.LAZY, mappedBy = "person", cascade = CascadeType.ALL)
  public Set<Contracts> getContracts() {
    return contracts;
  }
  //...
}

class Contract extends Domain {
  Person person;

  //...
  @JoinColumn(name = "PERSON__ID", nullable = false)
  public Person getPerson() {
    return this.person;
  }
  //...
}

我有一个人的实例,想要创建一个新的合同。 全都反思。

我的第一次尝试是这样的:

Domain domain = ...;
Method getter = resolveGetter(domain); // Person.getContracts()
ParameterizedType returnType = (ParameterizedType) getter.getGenericReturnType();

Class<Domain> cls = (Class<Domain>)returnType.getActualTypeArguments()[0];
Domain instance = cls.newInstance();

OneToMany annotation = getter.getAnnotation(OneToMany.class);
String mappedBy = annotation.mappedBy();

现在我需要来自cls的setter方法,其中mappedBy描述来设置合同中的人。 但是我如何正确地得到了二传手?

一个可能的解决方案是通过类的方法名称,但我认为它很难看。我没有找到hibernate框架的方法来做到这一点。

有人有想法吗?

用法:

  • Java 6 hibernate-core-3.6.10
  • 冬眠-公地注解-3.2.0
  • 冬眠-JPA-2.0-API-1.0.1

- 更新:

我通过

获得了hibernate属性
JavaReflectionManager manager = new JavaReflectionManager();
XClass xClass = manager.toXClass(cls);

List<XProperty> declaredProperties = xClass.getDeclaredProperties(XClass.ACCESS_PROPERTY); // Our domains use only Property Access
for (XProperty xProperty : declaredProperties) {
  if(xProperty.getName().equals(mappedBy)) {
     // How to set the value in the property?
  }
}

现在问题是如何在属性中设置值?

0 个答案:

没有答案