簡體   English   中英

找不到NamedQuery

[英]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>

車輛類

@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)
    ......
}

應用程序類

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();
}

抱歉,那是一團糟,但這是我第六次嘗試弄清楚它,但我不知道這是什么。 其他具有相同配置的應用程序確實運行良好...有人知道我做錯了什么嗎?

幾分鍾后,我從這兩個項目中刪除了所有屬性文件,並且... Java9啟動的項目目前不適用於JPA。 因此技術更新並不總是很好。

因此,如果有人創建Java 9項目並面臨該問題,也應該轉到project.properties並更改linse:

javac.source=9
javac.target=9

至:

javac.source=1.8
javac.target=1.8

太好了:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM