[当我尝试将实体持久化到数据库中时,出现以下错误消息:
错误[common.DbHelper](默认任务2),交易错误:{}:javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:无法提取ResultSet位于org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)在org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:807)在org.hibernate.internal.SessionImpl.persist(SessionImpl.java:785)在common.DbHelper.saveFilterHierarchy(DbHelper.java:109)在hu.otpbank.AggEditorPresenter.onEventSaveBean(AggEditorPresenter.java:225)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:498)在org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:95)在org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:85)
我的实体:
@Entity
@Table(name = "CRM_DM_FILTER", schema = "CRM_DM")
public class Filter implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CRM_DM_filter_seq")
@SequenceGenerator(name = "CRM_DM_filter_seq", schema = "CRM_DM", sequenceName = "CRM_DM_filter_seq", allocationSize = 1)
@Column(name = "ID", nullable = false)
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name = "AGGR_ID", referencedColumnName = "ID")
private Aggr aggrId;
public Aggr getAggrId() {
return aggrId;
}
public void setAggrId(Aggr aggrId) {
this.aggrId = aggrId;
}
@Basic
@Column(name = "GROUP_TYPE", nullable = false)
private String groupType;
public String getGroupType() {
return groupType;
}
public void setGroupType(String groupType) {
this.groupType = groupType;
}
@ManyToOne
@JoinColumn(name = "COLUMN_ID", referencedColumnName = "ID")
private DmColumn columnId;
public DmColumn getColumnId() {
return columnId;
}
public void setColumnId(DmColumn columnId) {
this.columnId = columnId;
}
@ManyToOne
@JoinColumn(name = "OPERATION_ID", referencedColumnName = "ID")
private Operation operationId;
public Operation getOperationId() {
return operationId;
}
public void setOperationId(Operation operationId) {
this.operationId = operationId;
}
@ManyToOne
@JoinColumn(name = "VALUE_COLUMN_ID", referencedColumnName = "ID")
private DmColumn valueColumnId;
public DmColumn getValueColumnId() {
return valueColumnId;
}
public void setValueColumnId(DmColumn valueColumnId) {
this.valueColumnId = valueColumnId;
}
@Basic
@Column(name = "VALUE", nullable = true)
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@OneToOne
@JoinColumn(name = "PARENT_FILTER_ID", referencedColumnName = "ID")
private Filter parentFilerId;
public Filter getParentFilerId() {
return parentFilerId;
}
public void setParentFilerId(Filter parentFilerId) {
this.parentFilerId = parentFilerId;
}
@Basic
@Column(name = "DESCRIPTION", nullable = true)
private String description;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Basic
@Column(name = "CRU", nullable = false)
private Integer cru;
public Integer getCru() {
return cru;
}
public void setCru(Integer cru) {
this.cru = cru;
}
@Basic
@Column(name = "CRD", nullable = false)
private Date crd;
public Date getCrd() {
return crd;
}
public void setCrd(Date crd) {
this.crd = crd;
}
@Basic
@Column(name = "CRSCN", nullable = false)
private BigInteger crscn;
public BigInteger getCrscn() {
return crscn;
}
public void setCrscn(BigInteger crscn) {
this.crscn = crscn;
}
@Basic
@Column(name = "LMU", nullable = false)
private Integer lmu;
public Integer getLmu() {
return lmu;
}
public void setLmu(Integer lmu) {
this.lmu = lmu;
}
@Basic
@Column(name = "LMD", nullable = false)
private Date lmd;
public Date getLmd() {
return lmd;
}
public void setLmd(Date lmd) {
this.lmd = lmd;
}
@Basic
@Column(name = "LMSCN", nullable = false)
private Integer lmscn;
public Integer getLmscn() {
return lmscn;
}
public void setLmscn(Integer lmscn) {
this.lmscn = lmscn;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Filter filter = (Filter) o;
return Objects.equals(aggrId, filter.aggrId) &&
Objects.equals(groupType, filter.groupType) &&
Objects.equals(operationId, filter.operationId) &&
Objects.equals(value, filter.value) &&
Objects.equals(parentFilerId, filter.parentFilerId);
}
@Override
public int hashCode() {
return Objects.hash(aggrId, groupType, operationId, value, parentFilerId);
}
}
我给出错误的方法:
public Result saveFilterHierarchy(List<Filter> filters) {
EntityTransaction transaction = null;
EntityManager entityManager = null;
Result result = new Result();
try {
entityManager = createEntityManager();
if (entityManager != null) {
if (filters != null && !filters.isEmpty())
for(int i = 0; i < filters.size(); i++) {
logger.error("Filter ready: {}", filters.get(i));
if(filters.get(i).getId() == null) {
transaction = entityManager.getTransaction();
transaction.begin();
initDatabaseSession(entityManager);
logger.error("Filter saved: {}", filters.get(i));
entityManager.flush();
entityManager.persist(filters.get(i));
transaction.commit();
}
}
}
} catch (Exception ex) {
logger.error("Transaction error: {}", ex);
} finally {
closeEntityManager(entityManager);
}
return result;
}
什么可能导致此错误?
原来我没有用于ID的序列的SELECT权限