在使用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) 在通过 MySQL 数据库使用 hibernate 和 jpa 的 Spring MVC 应用程序中,每当我尝试保存包含子实体的父实体时,都会收到有关子实体的以下错误消息:
Duplicate entry 'string1-string2' for key 'PRIMARY'
Run Code Online (Sandbox Code Playgroud)
这里,string1和string2指的是子实体的复合主键的两部分。 我该如何解决这个错误?
以下是在父实体中定义实体之间关系的方式Address:
@ManyToOne(cascade = { CascadeType.ALL }, fetch=FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "usecode", referencedColumnName = "code", insertable = false, updatable = false),
@JoinColumn(name = "usecodesystem", referencedColumnName = "codesystem", insertable = false, updatable = false)
})
public HL7GeneralCode use;
Run Code Online (Sandbox Code Playgroud)
以下是在子实体中定义关系的方式GeneralCode:
@OneToMany(mappedBy = "use", cascade = {CascadeType.ALL})
private Set<HL7Address> addresses;
Run Code Online (Sandbox Code Playgroud)
单击此链接可以查看完整的堆栈跟踪。可以在此链接中找到
该实体的完整代码。 Address
可以在此链接中GeneralCode …