在使用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) 我正在尝试通过在Netbeans(会话Bean实体类向导)自动生成的外观上调用业务方法,将@Entity对象从独立客户端传递到服务器企业应用程序.
@Entity类由两个String字段组成.但是当对象到达服务器端时,所有字段都是"null",尽管我在调用Facade的远程方法之前在客户端正确初始化了实体对象,而后者又应该将对象存储到我的MySQL数据库中(在事实上它是存储的,但是使用那些空引用).没有错误,除了将@Entity对象从客户端传递到服务器之外,一切正常.
相反的方式有效.我在我的表中手动添加了一行并调用了Facade的远程业务方法find(Object id),以便将db的条目返回给客户端.编组在这方面工作得很好.
基本上它由3个项目组成(类别附在底部):
我现在面对这个问题已经两天了,没有人知道如何解决.互联网搜索完全失败.因此,任何想法都受到高度赞赏 - 非常感谢提前!
任何想法高度赞赏.
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)