简体   繁体   English

query.getResultList 中的 ClassCastException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM