2017-10-06 100 views
0

我试图通过JPA获得与MySQL数据库的连接,但它现在让我疯狂。我不知道如何我已经做到了,但现在当我再说一遍,我得到这个异常:NamedQuery未找到

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

运载工具.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。其他具有相同配置的应用程序工作得很好... 有人有任何想法我做错了什么?

+1

应该将此添加为问题的答案,而不是放在问题中。 – DN1

+0

你说得对。完成。 – Andrew

回答

0

几分钟后,我已经把这两个项目的所有属性文件都关了起来,并且...用Java9开始的项目现在不适用于JPA。 所以技术更新并不总是好的。

所以,如果有人创建Java项目9,并与面临的问题也应该去project.properties和变化林斯:

javac.source=9 
javac.target=9 

到:

javac.source=1.8 
javac.target=1.8 

SOOOO这是所有:)