Causedby:org.hibernate.AnnotationException: No identifier specified for entity:
这是在SpringBoot 整合SpringDataJPA写测试类遇到的错误:
意思是说:根据Hinbernate的规范,一定要为实体类添加唯一的标识符,即主键id。在私有变量或set方法之上添加注解即可。
例:
@Id
@GeneratedValue
private int id;
但是,我是有这些注解的。
通过一系列的排查,终于找到了问题所在,问题在于注解导入的包有错,之前自动导的是spring的包,
import org.springframework.data.annotation.Id;
正确的注解导包是:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
实体类代码:
package com.beans;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class UserInfo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String userName;
private String password;
private String note;
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", note='" + note + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
UserDao接口:
package com.dao;
import com.beans.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* 要继承于Jpa提供的某个接口,并提供泛型,前面的是指要操作哪个类型的对象,后面是指主键类型
*/
public interface UserDao extends JpaRepository<UserInfo,Integer> {
//这里不用写任何东西
}
UserDaoTest测试类:
package com.test;
import com.SpringdataJpaApplication;
import com.beans.UserInfo;
import com.dao.UserDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import static org.junit.Assert.*;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringdataJpaApplication.class)//主启动类.class
public class UserDaoTest {
@Resource //Spring注入
UserDao userDao;
@Test
public void testSave() {
UserInfo user=new UserInfo();
user.setId(2);
user.setUserName("root");
user.setPassword("pwdaaa123");
user.setNote("这是一个jpa用户");
userDao.save(user);
System.out.println("用户添加成功");
}
}
application.properties配置文件:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=Root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl