Hibernate:找不到persister:java.math.BigDecimal
我正在尝试将guice、jpa和hibernate结合起来。hibernate的初始化看起来不错,直到我尝试通过DAO访问映射类。我找到了所有的帮助请求,但我的问题(目前)不是“自定义类”(至少我不这么认为) 总的来说没什么特别的。我得到了persistence.xml,它定义了我的类和其中一个类的基本(persist、findById、remove)DAOHibernate:找不到persister:java.math.BigDecimal,hibernate,jpa,guice,guice-persist,Hibernate,Jpa,Guice,Guice Persist,我正在尝试将guice、jpa和hibernate结合起来。hibernate的初始化看起来不错,直到我尝试通过DAO访问映射类。我找到了所有的帮助请求,但我的问题(目前)不是“自定义类”(至少我不这么认为) 总的来说没什么特别的。我得到了persistence.xml,它定义了我的类和其中一个类的基本(persist、findById、remove)DAO public abstract class AbstractDao<E, K> implements Dao<E, K&
public abstract class AbstractDao<E, K> implements Dao<E, K> {
@Inject
private EntityManager manager;
private final Class<E> entityClass;
@SuppressWarnings("unchecked")
public AbstractDao() {
final ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];
}
@Override
public void persist(final E entity) {
this.manager.persist(entity);
}
@Override
public void remove(final E entity) {
this.manager.remove(entity);
}
@Override
public E findById(final K id) {
return this.manager.find(this.entityClass, id);
}
}
我得到了以下错误(我得到了与java.lang.Long完全相同的错误):
我错过了什么?你需要更多的信息来帮助我吗
编辑#1:我尝试访问的映射类。它是使用Eclipse(最新JEE版本)自动创建的:
编辑#2:使用的DAO类。除泛型的类型定义外,其中没有任何内容:
public class LayerDao extends AbstractDao<Layer, Long> {
}
公共类LayerDao扩展了AbstractDao{
}
我终于发现了错误。在AbtractDao构造函数中,我使用非常常见的代码来确定类类型:
final ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];
final ParameterizedType genericSuperclass=(ParameterizedType)this.getClass().getGenericSuperclass();
this.entityClass=(类)genericSuperclass.getActualTypeArguments()[1];
仔细观察发现,我试图使用键对象类型genericSuperclass.getActualTypeArguments()[1]而不是实体对象类型genericSuperclass.getActualTypeArguments()[0]
正确的构造函数现在是这样的
@SuppressWarnings("unchecked")
public AbstractDao() {
final ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[0];
}
@SuppressWarnings(“未选中”)
公开摘要(){
最终参数化类型genericSuperclass=(参数化类型)this.getClass().getGenericSuperclass();
this.entityClass=(类)genericSuperclass.getActualTypeArguments()[0];
}
一切都按预期进行。很抱歉给您带来不便
import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* The persistent class for the T_M_LAYER_NEU database table.
*
*/
@Entity
@Table(name="T_M_LAYER_NEU")
@NamedQuery(name="Layer.findAll", query="SELECT l FROM Layer l")
public class Layer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="T_M_LAYER_NEU_ID_GENERATOR", sequenceName="FIG_SYS_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="T_M_LAYER_NEU_ID_GENERATOR")
@Column(unique=true, nullable=false, precision=38)
private long id;
@Column(nullable=false, precision=1)
private BigDecimal component;
@Column(name="DISPLAY_ORDER", nullable=false, precision=3)
private BigDecimal displayOrder;
@Column(nullable=false, precision=1)
private BigDecimal exklusiv;
@Column(name="GEOMETRIETYP_ID_FK", precision=2)
private BigDecimal geometrietypIdFk;
@Temporal(TemporalType.DATE)
@Column(name="GUELTIG_BIS", nullable=false)
private Date gueltigBis;
@Temporal(TemporalType.DATE)
@Column(name="GUELTIG_VON", nullable=false)
private Date gueltigVon;
@Column(nullable=false, precision=1)
private BigDecimal isactive;
@Column(nullable=false, precision=1)
private BigDecimal iskulisse;
@Column(nullable=false, precision=1)
private BigDecimal isoverview;
@Column(name="LAYERTYP_ID_FK", nullable=false, precision=2)
private BigDecimal layertypIdFk;
@Column(nullable=false, length=80)
private String name;
@Column(name="R_O", nullable=false, precision=1)
private BigDecimal rO;
@Column(name="SOURCE_ID", precision=38)
private BigDecimal sourceId;
@Column(name="\"SYSTEM\"", nullable=false, precision=1)
private BigDecimal system;
@Column(name="USE_COMPLETECACHE", nullable=false, precision=1)
private BigDecimal useCompletecache;
@Column(name="XML_DEF", length=100)
private String xmlDef;
//bi-directional many-to-one association to Label
@ManyToOne
@JoinColumn(name="LABEL_ID_FK")
private Label label;
//bi-directional many-to-one association to Symbol
@ManyToOne
@JoinColumn(name="SYM_ID_FK")
private Symbol symbol;
//bi-directional many-to-one association to Tabellen
@ManyToOne
@JoinColumn(name="LAYERDEF_ID_FK")
private Tabellen table;
public Layer() {
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public BigDecimal getComponent() {
return this.component;
}
public void setComponent(BigDecimal component) {
this.component = component;
}
public BigDecimal getDisplayOrder() {
return this.displayOrder;
}
public void setDisplayOrder(BigDecimal displayOrder) {
this.displayOrder = displayOrder;
}
public BigDecimal getExklusiv() {
return this.exklusiv;
}
public void setExklusiv(BigDecimal exklusiv) {
this.exklusiv = exklusiv;
}
public BigDecimal getGeometrietypIdFk() {
return this.geometrietypIdFk;
}
public void setGeometrietypIdFk(BigDecimal geometrietypIdFk) {
this.geometrietypIdFk = geometrietypIdFk;
}
public Date getGueltigBis() {
return this.gueltigBis;
}
public void setGueltigBis(Date gueltigBis) {
this.gueltigBis = gueltigBis;
}
public Date getGueltigVon() {
return this.gueltigVon;
}
public void setGueltigVon(Date gueltigVon) {
this.gueltigVon = gueltigVon;
}
public BigDecimal getIsactive() {
return this.isactive;
}
public void setIsactive(BigDecimal isactive) {
this.isactive = isactive;
}
public BigDecimal getIskulisse() {
return this.iskulisse;
}
public void setIskulisse(BigDecimal iskulisse) {
this.iskulisse = iskulisse;
}
public BigDecimal getIsoverview() {
return this.isoverview;
}
public void setIsoverview(BigDecimal isoverview) {
this.isoverview = isoverview;
}
public BigDecimal getLayertypIdFk() {
return this.layertypIdFk;
}
public void setLayertypIdFk(BigDecimal layertypIdFk) {
this.layertypIdFk = layertypIdFk;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getRO() {
return this.rO;
}
public void setRO(BigDecimal rO) {
this.rO = rO;
}
public BigDecimal getSourceId() {
return this.sourceId;
}
public void setSourceId(BigDecimal sourceId) {
this.sourceId = sourceId;
}
public BigDecimal getSystem() {
return this.system;
}
public void setSystem(BigDecimal system) {
this.system = system;
}
public BigDecimal getUseCompletecache() {
return this.useCompletecache;
}
public void setUseCompletecache(BigDecimal useCompletecache) {
this.useCompletecache = useCompletecache;
}
public String getXmlDef() {
return this.xmlDef;
}
public void setXmlDef(String xmlDef) {
this.xmlDef = xmlDef;
}
public Label getLabel() {
return this.label;
}
public void setLabel(Label label) {
this.label = label;
}
public Symbol getSymbol() {
return this.symbol;
}
public void setSymbol(Symbol symbol) {
this.symbol = symbol;
}
public Tabellen getTable() {
return this.table;
}
public void setTable(Tabellen table) {
this.table = table;
}
}
public class LayerDao extends AbstractDao<Layer, Long> {
}
final ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];
@SuppressWarnings("unchecked")
public AbstractDao() {
final ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[0];
}