我有一个使用 hibernate 在 postrgresql 数据库上运行查询的函数。
当我调用 query.getResultList()
时,我收到此错误:
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.UUID (java.lang.String and java.util.UUID are in module java.base of loader 'bootstrap')
at org.hibernate.type.descriptor.java.UUIDTypeDescriptor.unwrap(UUIDTypeDescriptor.java:20) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] at org.hibernate.type.PostgresUUIDType$PostgresUUIDSqlTypeDescriptor$1.doBind(PostgresUUIDType.java:74) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:73) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:276) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:271) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
Java函数:
@Override
public StudentEntity findByAccountId(UUID accountId) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery("select _student from StudentEntity _student where _student.accountId = :id_cont");
query.setParameter("id_cont", accountId.toString());
System.out.println(query.getResultList());
return new StudentEntity();
}
学生实体对象定义:
@Table(name = "Studenti")
@Entity(name = "StudentEntity")
public class StudentEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "genname")
@SequenceGenerator(name = "genname", sequenceName = "seqname", allocationSize = 1)
@Column(name = "Id")
private UUID Id;
@Column(name = "Nume")
private String firstName;
@Column(name = "Prenume")
private String lastName;
@Column(name = "An")
private int year;
@Column(name = "Grupa")
private String grupa;
@Column(name = "Id_cont")
private UUID accountId;
}
最佳答案
通过将 accountId
的数据类型从 UUID
更改为 String
来更新您的实体:
@Table(name = "Studenti")
@Entity(name = "StudentEntity")
public class StudentEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "genname")
@SequenceGenerator(name = "genname", sequenceName = "seqname", allocationSize = 1)
@Column(name = "Id")
private UUID Id;
@Column(name = "Nume")
private String firstName;
@Column(name = "Prenume")
private String lastName;
@Column(name = "An")
private int year;
@Column(name = "Grupa")
private String grupa;
@Column(name = "Id_cont")
private String accountId;
}
或
将 java 函数更改为:
@Override
public StudentEntity findByAccountId(UUID accountId) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createQuery("select _student from StudentEntity _student where _student.accountId = :id_cont");
query.setParameter("id_cont", accountId); // send the parameter as it is
System.out.println(query.getResultList());
return new StudentEntity();
}
关于java - query.getResultList 处的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59472888/