最初にコードを投稿します。
public boolean checkIfExists(String name, String surname) {
Object m = null;
entityManager.getTransaction().begin();
Query q = entityManager.createNamedQuery(Person.findByNameSurname)
.setParameter("i", name).setParameter("n", surname);
try {
m = q.getSingleResult();
} catch (Exception sqle) {
System.out.println("SQL exception: " + sqle.getMessage());
}
entityManager.getTransaction().commit();
if (m != null)
return true;
return false;
}
クエリ:
@NamedQuery(name=Person.findByNameSurname, query="SELECT p FROM Person p WHERE p.name like :i AND p.surname like :n"),
そして、このコードは、名前と姓を持つ人物がデータベースに実際に存在する場合に正常に機能します。
データベースにない名前または姓を入力すると、次のような例外が発生します。
スレッド「メイン」での例外 java.lang.NoClassDefFoundError: org/springframework/orm/jpa/EntityManagerFactoryUtils at org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc$afterThrowing$org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect$1$18a1ac9(JpaExceptionTranslatorAspect.aj:33) pl.program.dao.PersonJpaDao.checkIfExists(PersonJpaDao.java:27) at pl.program.Start.test(Start.java:121) at pl.program.Main.main(Main.java:11) 原因: java .lang.ClassNotFoundException: org.springframework.orm.jpa.EntityManagerFactoryUtils at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security .AccessController.doPrivileged(ネイティブ メソッド) java.net.URLClassLoader.findClass(URLClassLoader.java:354) で java.lang.ClassLoader.loadClass(ClassLoader.java:424) で sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) で java.lang.ClassLoader.loadClass(ClassLoader.java:357) で。 .. 4 つ以上
たとえば、データベースに名前を持つ人がいるとします-ジャックと姓ブラックと私は電話します
checkIfExists("Jack", "Black")
全て大丈夫。しかし、私がそれを
checkIfExists("Jack1", "Black")
上記の例外について言及しています。
レコードがデータベースに存在せず、使用したい場合、このような他の方法でも同じ問題が発生しますgetSingleResult()
。
試しgetResultList()
てみましたが、空のリストが返されます。
ここで何が問題になる可能性があるか考えていますか?