找不到命名查询
NamedQuery not found
我正在尝试通过 JPA 与 mysql db 建立联系,但它现在让我发疯。我不知道我是怎么做到的,但现在当我重复我得到这个异常时:
[EL Warning]: metamodel: 2017-10-06 12:04:17.461--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
Hello world
Exception in thread "main" java.lang.IllegalArgumentException: NamedQuery of name: Vechicle.findAll not found.
at org.eclipse.persistence.internal.jpa.QueryImpl.getDatabaseQueryInternal(QueryImpl.java:351)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1124)
at javaapplication3.JavaApplication3.main(JavaApplication3.java:28)
这是我的文件:
Persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="JavaApplication3PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>javaapplication3.Bus</class>
<class>javaapplication3.ProductsList</class>
<class>javaapplication3.Worker</class>
<class>javaapplication3.Division</class>
<class>javaapplication3.VechicleType</class>
<class>javaapplication3.Kontrahent</class>
<class>javaapplication3.Vies</class>
<class>javaapplication3.Templ</class>
<class>javaapplication3.DocumentsList</class>
<class>javaapplication3.Vechicle</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dem?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="test"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="test"/>
</properties>
</persistence-unit>
</persistence>
Vechicle.class
@Entity
@Table(name = "vechicle")
@NamedQueries({
@NamedQuery(name = "Vechicle.findAll", query = "SELECT v FROM Vechicle v"),
@NamedQuery(name = "Vechicle.findById", query = "SELECT v FROM Vechicle v WHERE v.id = :id"),
@NamedQuery(name = "Vechicle.findByNrReg", query = "SELECT v FROM Vechicle v WHERE v.nrReg = :nrReg"),
@NamedQuery(name = "Vechicle.findBySize", query = "SELECT v FROM Vechicle v WHERE v.size = :size")})
public class Vechicle implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
......
}
Application.class
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("JavaApplication3PU");
private static EntityManager em = emf.createEntityManager();
public static void main(String[] args) {
System.out.println("Hello world");
em.getTransaction().begin();
List<Vechicle> vech = em.createNamedQuery("Vechicle.findAll").getResultList();
em.getTransaction().commit();
}
很抱歉弄得一团糟,但这是我第六次尝试解决这个问题,但我不知道什么是 wrog。具有相同配置的其他应用程序运行得非常好......
有人知道我做错了什么吗?
几分钟后,我检查了两个项目的所有属性文件,并且...以 Java9 开始的项目现在不适用于 JPA。
所以技术更新并不总是好的。
因此,如果有人创建了 Java 9 项目并且也面临该问题,则应该转到 project.properties 并更改 linse:
javac.source=9
javac.target=9
至:
javac.source=1.8
javac.target=1.8
太棒了:)
我正在尝试通过 JPA 与 mysql db 建立联系,但它现在让我发疯。我不知道我是怎么做到的,但现在当我重复我得到这个异常时:
[EL Warning]: metamodel: 2017-10-06 12:04:17.461--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
Hello world
Exception in thread "main" java.lang.IllegalArgumentException: NamedQuery of name: Vechicle.findAll not found.
at org.eclipse.persistence.internal.jpa.QueryImpl.getDatabaseQueryInternal(QueryImpl.java:351)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1124)
at javaapplication3.JavaApplication3.main(JavaApplication3.java:28)
这是我的文件:
Persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="JavaApplication3PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>javaapplication3.Bus</class>
<class>javaapplication3.ProductsList</class>
<class>javaapplication3.Worker</class>
<class>javaapplication3.Division</class>
<class>javaapplication3.VechicleType</class>
<class>javaapplication3.Kontrahent</class>
<class>javaapplication3.Vies</class>
<class>javaapplication3.Templ</class>
<class>javaapplication3.DocumentsList</class>
<class>javaapplication3.Vechicle</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dem?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="test"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="test"/>
</properties>
</persistence-unit>
</persistence>
Vechicle.class
@Entity
@Table(name = "vechicle")
@NamedQueries({
@NamedQuery(name = "Vechicle.findAll", query = "SELECT v FROM Vechicle v"),
@NamedQuery(name = "Vechicle.findById", query = "SELECT v FROM Vechicle v WHERE v.id = :id"),
@NamedQuery(name = "Vechicle.findByNrReg", query = "SELECT v FROM Vechicle v WHERE v.nrReg = :nrReg"),
@NamedQuery(name = "Vechicle.findBySize", query = "SELECT v FROM Vechicle v WHERE v.size = :size")})
public class Vechicle implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
......
}
Application.class
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("JavaApplication3PU");
private static EntityManager em = emf.createEntityManager();
public static void main(String[] args) {
System.out.println("Hello world");
em.getTransaction().begin();
List<Vechicle> vech = em.createNamedQuery("Vechicle.findAll").getResultList();
em.getTransaction().commit();
}
很抱歉弄得一团糟,但这是我第六次尝试解决这个问题,但我不知道什么是 wrog。具有相同配置的其他应用程序运行得非常好...... 有人知道我做错了什么吗?
几分钟后,我检查了两个项目的所有属性文件,并且...以 Java9 开始的项目现在不适用于 JPA。 所以技术更新并不总是好的。
因此,如果有人创建了 Java 9 项目并且也面临该问题,则应该转到 project.properties 并更改 linse:
javac.source=9
javac.target=9
至:
javac.source=1.8
javac.target=1.8
太棒了:)