[英]ClassCastException at query.getResultList
I have a function that runs a query on a postrgresql database using hibernate.我有一个使用 hibernate 对 postrgresql 数据库运行查询的函数。
When I call query.getResultList()
I get this error:当我调用
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')
java.lang.ClassCastException: 类 java.lang.String 无法转换为类 java.util.UUID(java.lang.String 和 java.util.UUID 位于加载程序“bootstrap”的模块 java.base 中)
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]
在 org.hibernate.type.descriptor.java.UUIDTypeDescriptor.unwrap(UUIDTypeDescriptor.java:20) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] 在 org.hibernate.type.PostgresUUIDType$ PostgresUUIDSqlTypeDescriptor$1.doBind(PostgresUUIDType.java:74) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] 在 org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java: 73) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] 在 org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:276) ~[hibernate-core-5.4.9.Final .jar:5.4.9.Final] 在 org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:271) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
Java function: 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();
}
Student entity object definition:学生实体对象定义:
@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;
}
Update your entity to this by changing the data type of the accountId
to String
from UUID
:通过将
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;
}
or或者
Change the java function to this :将 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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.