我尝试将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和休眠autobean吗?
预先谢谢你。

最佳答案

我认为您不能在@javax.persistence.Entity上使用interface。您必须将其与常规Class一起使用。

因此,您应该这样做:

shared包中定义一个接口

public interface Contact {

    public int getId();

    public String getId();

    public void setId(int id);

    public void setName(String name);
}


然后在server包中创建一个实现该接口的类:

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/

10-08 22:38