【发布时间】:2014-07-25 11:42:02
【问题描述】:
我在 Web 应用程序中创建了 Entity、DAo 和 Façade。我的代码没有错误,但是在使用 JPA 的 find(T.class,id) 方法时出现此异常。它还说我的实体上没有 @Entity 注释。但这不是真的。如何解决这个问题。
我的实体
@Entity
@Table(name = "uyeler")
public class Uyeler implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "kullaniciadi")
private String kullaniciadi;
@Column(name = "sifre")
private String sifre;
@Column(name = "ad")
private String ad;
@Column(name = "soyad")
private String soyad;
@Column(name = "cinsiyet")
private String cinsiyet;
@Column(name = "ilgialanlari")
private String ilgialanlari;
@Column(name = "dogumtarihi")
private String dogumtarihi;
@Column(name = "eposta")
private String eposta;
@Column(name = "epostahaberdar")
private String epostahaberdar;
public String getKullaniciadi() {
return kullaniciadi;
}
MyDaoImpl;
public abstract class UyelerDaoImpl<T> {
private final static String UNIT_NAME ="KutuphaneOtomasyonuEJB";
@PersistenceUnit(unitName = UNIT_NAME)
private EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory(UNIT_NAME);
private EntityManager em = emf.createEntityManager();
public Uyeler findMemberByUserName(String username){
return em.find(Uyeler.class, username);
}
}
persistence.xml
<persistence-unit name="KutuphaneOtomasyonuEJB"
transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>jdbc/MySQLConnectionPool</non-jta-data-source>
<class>com.mesutemre.businesModel.Kitaplar</class>
<class>com.mesutemre.businesModel.Uyeler</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.logging.level" value="FINEST" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3307/kutuphane" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="root" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
</properties>
</persistence-unit>
堆栈跟踪;
WARNING: EJB5184:A system exception occurred during an invocation on EJB UyelerDAO, method: public com.mesutemre.businesModel.Uyeler com.mesutemre.businesDAOs.UyelerDAO.findMemberByUserName(java.lang.String)
警告:javax.ejb.TransactionRolledbackLocalException:在 com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java) 的 com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:5071) 处的 bean 抛出异常:4906) 在 com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045) 在 com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994) 在 com.sun.ejb.containers。 EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222) 在 严重:原因:javax.ejb.TransactionRolledbackLocalException:从 bean 抛出的异常 严重:在 com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:5071) 严重:在 com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4906) 严重:在 com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045) 严重:... 71 更多 严重:原因:java.lang.IllegalArgumentException:未知实体 bean 类:com.mesutemre.businesModel.Uyeler 类,请验证该类是否已使用 @Entity 注释进行标记。 严重:在 org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:648) 严重:
【问题讨论】:
-
请将实体和 DAO 类以及您的
persistence.xml添加到问题中。 -
我已经添加了我的实体和 dao impl。
-
代码看起来没问题。您还可以添加异常堆栈跟踪吗? PS:你不应该使用
RESOURCE_LOCAL,因为应用服务器提供了一个JTA-datasource。 -
我已经添加了堆栈跟踪