本文介紹了Eclipse中單獨(dú)JAR中的jpa@MappdSuperclass導(dǎo)致驗(yàn)證錯(cuò)誤&Quot;該實(shí)體沒(méi)有定義主鍵屬性&Quot;的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我有一個(gè)用于所有@Entity類的@MappdSuperclass AbstractEntity。只要超類與我的實(shí)體在同一個(gè)Eclipse項(xiàng)目中,它就可以完美地工作。但是,因?yàn)槲以趲讉€(gè)項(xiàng)目中重用了這個(gè)超類,所以我只想把它分解到自己的JAR文件中。當(dāng)我這樣做時(shí)(當(dāng)然我將JAR文件添加到構(gòu)建路徑),Eclipse在我的每個(gè)@Entity類上都會(huì)給出一個(gè)錯(cuò)誤:
該實(shí)體未定義主鍵屬性。
Eclipse將@Entity注釋突出顯示為錯(cuò)誤的來(lái)源。當(dāng)然,所有類都繼承自此AbstractEntity。兩個(gè)項(xiàng)目中的包名相同。JAR項(xiàng)目具有所有必要的生成路徑-包含AbstractEntity的JAR文件項(xiàng)目中沒(méi)有錯(cuò)誤。
當(dāng)我將其部署到我的應(yīng)用程序服務(wù)器(JBoss 7.1)時(shí),它工作得很好。這使我認(rèn)為這只是一個(gè)Eclipse問(wèn)題,錯(cuò)誤地標(biāo)識(shí)了一個(gè)錯(cuò)誤。
抽象實(shí)體:
package com.xyc.abc;
import java.io.Serializable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
簡(jiǎn)單實(shí)體類示例:
@Entity
public class TestEntity extends AbstractEntity {
...
}
我還看到其他一些帖子說(shuō),問(wèn)題可能是超類中的批注在getter上,而不是在字段上-只有當(dāng)您的實(shí)體中沒(méi)有其他JPA批注(我有)時(shí),這才是問(wèn)題。有什么想法嗎?
推薦答案
看起來(lái)這與此處描述的錯(cuò)誤有關(guān):
https://bugs.eclipse.org/bugs/show_bug.cgi?id=361042
最終修復(fù)它的(實(shí)際上更多的解決方法)是將AbstractEntity添加到包含My Entities的項(xiàng)目的persistence.xml中的類列表中。盡管AbstractEntity位于單獨(dú)的JAR中,并且本身不是一個(gè)具體的實(shí)體,但我想這給了Eclipse足夠的信息來(lái)停止抱怨。這似乎對(duì)應(yīng)用程序本身沒(méi)有任何不利影響。
這篇關(guān)于Eclipse中單獨(dú)JAR中的jpa@MappdSuperclass導(dǎo)致驗(yàn)證錯(cuò)誤&Quot;該實(shí)體沒(méi)有定義主鍵屬性&Quot;的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,






