我尝试将 GWT AutoBean 与 Hibernate 一起使用。于是我写了如下的实体类:
@Entity(name = "Contact")
public interface Contact {
public interface ContactFactory extends AutoBeanFactory {
ContactFactory INSTANCE = AutoBeanFactorySource.create(ContactFactory.class);
AutoBean<Contact> createContact();
AutoBean<Contact> wrapContact(Contact contact);
}
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getId();
@Column(name = "name")
public String getName();
public void setId(int id);
public void setName(String name);
}
但是当我调用这个方法时:
public void insert(Contact contact) {
Transaction tx = session.beginTransaction();
session.save(contact);
tx.commit();
}
我收到以下异常:
org.hibernate.MappingException: Unknown entity: com.sun.proxy.$Proxy11
我用 google 搜索了一下,发现 AutoBean 创建了一个代理来访问 bean 的属性。我认为 AutoBean 的代理和 Hibernate 的代理之间可能存在冲突。或者Hibernate可能无法获取@Entity注释并获取实体名称属性。
有人使用过 GWT 和 hibernate autobean 吗? 预先感谢您。
最佳答案
我认为您不能在接口(interface)
上使用@javax.persistence.Entity
。您必须将它与普通的Class
一起使用。
所以你应该这样做:
在shared
包中定义一个接口(interface)
public interface Contact {
public int getId();
public String getId();
public void setId(int id);
public void setName(String name);
}
然后创建一个在您的 server
包中实现该接口(interface)的类:
public class ContactImpl implements Contact {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
public int getId() {
return id;
}
...
}
关于java - 将 GWT AutoBean 与 Hibernate 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20189305/