【问题标题】:How to create simple Insert to SQL Server using Java Persistence API如何使用 Java Persistence API 创建简单的插入到 SQL Server
【发布时间】:2018-04-07 19:29:20
【问题描述】:
  • SQL Server 连接:正常

  • 对于 MS SQL jar:OK

  • 对于 Hibernate ORM jar:OK

  • 没有插入数据库!!!

  • 运行主类时出错!!!

  • 是“hibernate.cfg.xml” 需要???

Personal.java 是模型类。 JavaJpaTestImpl.java 是主类。

Personel.java

package JpaTestPackage;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@NamedQuery(name="Personel.findAll", query="SELECT p FROM Personel p")

public class Personel implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="Id")
    private int id;

    @Column(name="Personel_Adi")
    private String personel_Adi; 

    @Column(name="Personel_Soyadi")
    private String personel_Soyadi;

    public Personel() {
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPersonel_Adi() {
        return this.personel_Adi;
    }

    public void setPersonel_Adi(String personel_Adi) {
        this.personel_Adi = personel_Adi;
    }

    public String getPersonel_Soyadi() {
        return this.personel_Soyadi;
    }

    public void setPersonel_Soyadi(String personel_Soyadi) {
        this.personel_Soyadi = personel_Soyadi;
    }

}

JavaJpaTestImpl.java

public class JavaJpaTestImpl {

    public static void main(String [] args)
    {
        EntityManager em;
        EntityManagerFactory emf;
        Personel personel=new Personel();
        personel.setPersonel_Adi("Kerem");
        personel.setPersonel_Soyadi("GUL");
        emf=Persistence.createEntityManagerFactory("JpaTest");
        em=emf.createEntityManager();
        EntityTransaction et= em.getTransaction();
        et.begin();
        em.persist(personel);
        et.commit();
        em.close();
        emf.close();


    }

}

persistence.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="JpaTest" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>JpaTestPackage.Personel</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1433;databaseName=aaaa"/>
            <property name="javax.persistence.jdbc.user" value="bbbb"/>
            <property name="javax.persistence.jdbc.password" value="cccc"/>
            <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
        </properties>
    </persistence-unit>
</persistence>

例外:

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/jandex/IndexView
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:51)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:129)
    at org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:93)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:86)
    at org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:101)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:67)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at JpaTestPackage.JavaJpaTestImpl.main(JavaJpaTestImpl.java:17)
Caused by: java.lang.ClassNotFoundException: org.jboss.jandex.IndexView
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

【问题讨论】:

    标签: java sql-server jpa insert persistence


    【解决方案1】:

    将 jandex jar 库添加到您的类路径

    【讨论】:

      【解决方案2】:

      当我添加 jandex jar 时出现以下错误...

      log4j:WARN No appenders could be found for logger (org.jboss.logging).
      log4j:WARN Please initialize the log4j system properly.
      Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named JpaTest
          at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
          at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
          at JpaTestPackage.JavaJpaTestImpl.main(JavaJpaTestImpl.java:17)
      

      【讨论】:

      • 把你的 persistence.xml 文件放到 META-INF 文件夹下
      • 您使用哪个版本的 mssql 驱动程序?你需要 sqljdbc4
      • 好像有pb可以连接你的数据库,尝试使用jtds驱动。你会得到同样的错误吗?
      • 你用的是哪个版本的hibernate和sql server?
      • 驱动程序:Microsoft SQL Server 2008 JDBC 驱动程序休眠:hibernate-release-5.3.0.CR1
      【解决方案3】:

      persistence.xml 文件和其他 jar 文件显示在快照中。

      【讨论】:

        猜你喜欢
        • 2020-02-02
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多