Hibernate,没有为实体指定标识符,用于映射 String id
Posted
技术标签:
【中文标题】Hibernate,没有为实体指定标识符,用于映射 String id【英文标题】:Hibernate, No identifier specified for entity, For mapping String id 【发布时间】:2017-06-25 09:36:59 【问题描述】:我用:
mysql-connector-java 6.0.6
hibernate 5.2.10.Final
spring 4.3.8.RELEASE
类代码:
public class PhoneNumber extends AbstractValue
public static final int CELL_PHONE = 1, HOME_PHONE = 2, WORK_PHONE = 3;
public PhoneNumber(String value, Integer type)
super(value, type);
public PhoneNumber()
this(null,null);
父类:
public abstract class AbstractValue
private String value;
private Integer type;
public AbstractValue(String value, Integer type)
this.value = value;
this.type = type;
public String getValue()
return value;
public Integer getType()
return type;
public void setValue(String value)
this.value = value;
public void setType(Integer type)
this.type = type;
映射:
<entity class="PhoneNumber" name="PhoneNumber">
<table name="PhoneNumber"/>
<attributes>
<id name="value">
</id>
<basic name="type">
<column nullable="false"/>
</basic>
</attributes>
</entity>
已经试过了:
<entity class="PhoneNumber" name="PhoneNumber">
<table name="PhoneNumber"/>
<attributes>
<id name="value" access="FIELD">
<generated-value strategy="SEQUENCE" generator="IdSeq" />
<sequence-generator name="IdSeq" sequence-name="IdSeq" allocation-size="1" />
</id>
<basic name="type">
<column nullable="false"/>
</basic>
</attributes>
</entity>
<entity class="PhoneNumber" name="PhoneNumber">
<table name="PhoneNumber"/>
<attributes>
<id name="value">
<generated-value strategy="IDENTITY" generator="uuid" />
</id>
<basic name="type">
<column nullable="false"/>
</basic>
</attributes>
</entity>
<entity class="PhoneNumber" name="PhoneNumber">
<table name="PhoneNumber"/>
<attributes>
<id name="value">
<generated-value strategy="TABLE" generator="uuid" />
<table-generator name="uuid" />
</id>
<basic name="type">
<column nullable="false"/>
</basic>
</attributes>
</entity>
并且已经阅读:(所以我希望我不要重复)
org.hibernate.AnnotationException: No identifier specified for entity: com.ubosque.modelo.Ciudadano
org.hibernate.AnnotationException: No identifier specified for entity: login.Users
java.lang.RuntimeException: org.hibernate.AnnotationException: No identifier specified for entity
Org.Hibernate.AnnotationException: No Identifier Specified For Entity I don't have a id in my table
org.hibernate.AnnotationException: No identifier specified for entity using JPA XML entity-mapping
No Identifier specified exception even when it was
string id generator
How to use @Id with String Type in JPA / Hibernate?
还有更多...
错误:
原因:org.hibernate.AnnotationException:没有为实体指定标识符:com.mayan.nst.server.model.PhoneNumber
如果可能的话,我更喜欢一个解决方案,即不会生成 id
非常感谢您阅读并提供任何帮助
【问题讨论】:
AbstractValue
是否在某处被标记为实体或映射超类?因为它具有您要使用身份的字段,并且当前无法与您在此处发布的内容保持一致...
嘿尼尔谢谢你在这里发帖,我不确定我是否完全理解你。 PhoneNumber
不是抽象的,id 是常规的 String
。
您想成为“id”的字段在AbstractValue
CLASS 中。 AbstractValue
CLASS 未标记为“实体”或“映射超类”,因此您不能使用该类中的字段!解决方案是将AbstractValue
标记为“映射超类”......就像任何 JPA 文档会告诉你的那样
neil stocktin 你说得对!非常感谢你的工作!!!!
【参考方案1】:
感谢Neil Stocktin,问题是我试图从这个孩子那里获得超类属性。 (不工作)。解决方案将被添加
<entity class="AbstractValue">
<attributes>
<id name="value">
</id>
</attributes>
</entity>
从孩子身上移除
更新
更好的解决方案,将超类儿童表分开。使用:
<mapped-superclass class="AbstractValue">
<attributes>
<id name="value"/>
<basic name="type">
<column nullable="false"/>
</basic>
</attributes>
</mapped-superclass>
【讨论】:
以上是关于Hibernate,没有为实体指定标识符,用于映射 String id的主要内容,如果未能解决你的问题,请参考以下文章
org.hibernate.AnnotationException:没有为实体指定标识符 - 即使它是
异常:org.hibernate.AnnotationException:没有为实体指定标识符:jpa.tenants.DataSourceConfig
调用 init 方法失败;嵌套异常是 org.hibernate.AnnotationException:没有为实体指定标识符
Org.Hibernate.AnnotationException:没有为实体指定标识符我的表中没有 id