相关疑难解决方法(0)

MySQL上的@GeneratedValue多态抽象超类

在使用Hibernate和MySQL的Spring MVC应用程序中,我有一个抽象的超类BaseEntity,它管理模型中所有其他实体的ID值.该id领域使用@GeneratedValue.每当我的代码试图保存任何扩展的子类时,我都会遇到问题BaseEntity.这个问题带有的选择GenerationType@GeneratedValue.

在我的代码中BaseEntity尝试保存到底层MySQL数据库的子类的每个地方,我收到以下错误:

ERROR SqlExceptionHelper - Table 'docbd.hibernate_sequences' doesn't exist  
Run Code Online (Sandbox Code Playgroud)

我已经在SO和谷歌上阅读了很多关于此的帖子,但是他们要么处理其他数据库(不是MySQL),要么他们不处理抽象超类.我无法通过使用来解决问题,GenerationType.IDENTITY因为我使用抽象超类来管理id模型中所有实体的字段.同样,我不能使用,GenerationType.SEQUENCE因为MySQL不支持序列.

那么我该如何解决这个问题呢?

这是以下代码BaseEntity.java:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    protected Integer id;

    public void setId(Integer id) {this.id = id;}
    public Integer getId() {return id;}

    public boolean isNew() {return (this.id == null);}

}
Run Code Online (Sandbox Code Playgroud)

以下是扩展的实体之一的代码示例BaseEntity:

@Entity
@Table(name = "ccd")
public class …
Run Code Online (Sandbox Code Playgroud)

java mysql database hibernate jpa

6
推荐指数
1
解决办法
4974
查看次数

Java和EJB3:如何正确地将@Entity对象从客户端传递到服务器?

我正在尝试通过在Netbeans(会话Bean实体类向导)自动生成的外观上调用业务方法,将@Entity对象从独立客户端传递到服务器企业应用程序.

@Entity类由两个String字段组成.但是当对象到达服务器端时,所有字段都是"null",尽管我在调用Facade的远程方法之前在客户端正确初始化了实体对象,而后者又应该将对象存储到我的MySQL数据库中(在事实上它是存储的,但是使用那些空引用).没有错误,除了将@Entity对象从客户端传递到服务器之外,一切正常.

相反的方式有效.我在我的表中手动添加了一行并调用了Facade的远程业务方法find(Object id),以便将db的条目返回给客户端.编组在这方面工作得很好.

基本上它由3个项目组成(类别附在底部):

  1. Enterprise-App/EJB:包含与MySQL的Facade和JDBC连接的实现
  2. Java类库:保存远程业务方法和实体bean的接口(这个接口由服务器端和客户端共享(引用))
  3. Java应用程序:构建InitialContext并执行JNDI查找以获取对Facade的远程业务方法的引用

我现在面对这个问题已经两天了,没有人知道如何解决.互联网搜索完全失败.因此,任何想法都受到高度赞赏 - 非常感谢提前!

任何想法高度赞赏.

A1)EJB/Enterprise-App:这是抽象外观类(由Netbeans自动生成):

public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }
}
Run Code Online (Sandbox Code Playgroud)

A2)EJB/Enterprise-App:Facade实现(由Netbeans自动生成):

@Stateless
public class UserFacade extends AbstractFacade<User> implements UserFacadeRemote {

    @PersistenceContext(unitName = "LawSuiteEE-ejbPU")
    private EntityManager em; …
Run Code Online (Sandbox Code Playgroud)

serialization entity ejb jpa rmi

2
推荐指数
1
解决办法
4720
查看次数

标签 统计

jpa ×2

database ×1

ejb ×1

entity ×1

hibernate ×1

java ×1

mysql ×1

rmi ×1

serialization ×1