hibernate - 使用通用生成器时出错
问题描述
使用 Spring Boot 2.1.1 和 H2 数据库测试 JPA。
错误
出现意外错误(类型=内部服务器错误,状态=500)。无法通过反射设置字段值 [ST30790] 值:[class com.example.demo.model.Student.id] com.example.demo.model.Student.id 的设置器;嵌套异常是 org.hibernate.PropertyAccessException:无法通过反射设置字段值 [ST30790] 值:com.example.demo.model.Student.id 的 [class com.example.demo.model.Student.id] setter
学生班
package com.example.demo.model;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Student {
@Id
@GeneratedValue(generator = "Student_id")
@GenericGenerator(name = "Student_id", strategy = "com.example.demo.model.StudentGenerator")
private int id;
private String email;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
我的发电机
package com.example.demo.model;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.enhanced.SequenceStyleGenerator;
import java.io.Serializable;
import java.util.Random;
public class StudentGenerator extends SequenceStyleGenerator {
private static final String STUDENT_ID_PREFIX = "ST";
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
return STUDENT_ID_PREFIX + String.valueOf(generateID());
}
public static char[] generateID() {
//Creating object of Random class
Random obj = new Random();
char[] otp = new char[5];
for (int i = 0; i < 5; i++) {
otp[i] = (char) (obj.nextInt(10) + 48);
}
System.out.print("Your OTP is : " + otp.toString());
return otp;
}
}
请帮忙
解决方案
您的生成器输出是字符串,但是您的学生实体 ID 是 int。更改int
为string
学生id
属性,它应该可以工作。
推荐阅读
- c++ - 如何从文件中读取并将元素分组为 3 到 C++ 中的双向链表中
- solidity - 我收到一个错误,一个声明错误,但它指向我不明白的引号中的内容
- cypress - cypress 测试套件是否有办法在其输出中取消屏蔽敏感信息以进行调试?
- powerbi - 根据用户动态更改 power bi 嵌入式报表
- android - 如何在 Jetpack Compose Text 中居中(水平和垂直)文本
- python - 如何根据另一列的值计数从 Pandas Dataframe 中采样数据
- python - PyGame 在第二个屏幕上正常,但在笔记本电脑屏幕上显示黑屏
- python - 在数据框列中分离出逗号分隔的项目并获取单独的计数
- python - 尝试从网站实时抓取文章时,我总是遇到延迟
- javascript - 如何通过JS为html元素创建升序号?