调用init方法失败;嵌套异常是javax.persistence.PersistenceException

时间:2017-10-02 13:09:46

标签: spring jpa

伙计们我遇到了一个问题,我搜索了很多并尝试在stackflow中找到解决方案,但它失败了,似乎没有人遇到同样的问题。更重要的是,我已经筋疲力尽了.Below is我的代码和配置文件。

<project xmlns="http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

  <groupId>com.robot</groupId>
  <artifactId>springdata</artifactId>
  <version>1.0-SNAPSHOT</version>
<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>
</plugins>
</build>
<packaging>jar</packaging>



<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 <dependencies>
 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
 <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.38</version>
 </dependency>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>4.3.8.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.3.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-
data-jpa -->
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-jpa</artifactId>
  <version>1.8.0.RELEASE</version>
</dependency>


<!-- https://mvnrepository.com/artifact/hibernate/hibernate-entitymanager --
>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>4.3.6.Final</version>
</dependency>


</dependencies>
</project>

在我的依赖xml中,我添加了spring数据和hibernate。

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   xsi:schemaLocation="http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/data/jpa 
   http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
   http://www.springframework.org/schema/tx 
   http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-4.0.xsd">

   <!--1 配置数据源-->
  <bean id="dataSource" 
  class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    <property name="driverClassName" value="com.mysql.jdbc.Driver">
    </property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
    <property name="url" value="jdbc:mysql:///spring_data"></property>
   </bean>

 <!--2 配置EntityManagerFactory-->
 <bean id="entityManagerFactory" 

 class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean 
 class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="packagesToScan" value="com.robot"/>

    <property name="jpaProperties">
        <props>
            <prop 
     key="hibernate.ejb.naming_strategy">
   org.hibernate.cfg.ImprovedNamingStrategy</prop>
            <prop 
   key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
   </bean>
   <!--&lt;!&ndash;3 配置事务管理器&ndash;&gt;-->
   <!--<bean id="transactionManager"   
   class="org.springframework.orm.jpa.JpaTransactionManager">-->
    <!--<property name="entityManagerFactory" ref="entityManagerFactory"/>--
    >
  <!--</bean>-->

  <!--&lt;!&ndash;4 配置支持注解的事务&ndash;&gt;-->
  <!--<tx:annotation-driven transaction-manager="transactionManager"/>-->

  <!--&lt;!&ndash;5 配置spring data&ndash;&gt;-->
  <!--<jpa:repositories base-package="com.robot" entity-manager-factory- 
    ref="entityManagerFactory"/>-->

  <!--<context:component-scan base-package="com.robot"/>-->

</beans>

下面是我的实体类,它非常简单,所以我认为任何事情都不会出错。

package com.robot.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Employee {


private int id;

private String name;

private  int age;

public int getId() {
    return id;
}

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

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
 }
}

下面是我的测试类

package com.robot.dao;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class StudentSpringDataTest {
private ApplicationContext ctx=null;
@Before
public void setUp(){
    System.out.println("Set Up");
    ctx= new ClassPathXmlApplicationContext("beans_new.xml");
}
@After
public  void tearDown(){
    System.out.println("Tear Down");
    ctx =null;
}

@Test
public void initializationTest(){


 }
}

当我运行initializationTest方法时,它显示的错误就像描述的图片一样。

log info

1 个答案:

答案 0 :(得分:2)

对于下一个问题,不要将堆栈跟踪包含为图像。

错误很明确:&#34;没有为实体指定标识符:....&#34;,这是因为您在set方法上有@Id注释,而您无法使用关于解决者的注释。您需要在字段或getter方法上使用它。

Hibernate mapping annotations - Access type

尝试:

@Entity
public class Employee {

  @GeneratedValue
  @Id
  private int id;

  ...    

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }
 ...
}
相关问题