The code below worked fine with Hibernate 5.6.x but now fails after upgrading to hibernate 6.5.2.Final.
<code>@Embeddable()
public class CertificateId {
@Basic()
@Column(name = "id")
private String id;
...
}
@MappedSuperclass()
public class ModelCore {
@Id()
@GeneratedValue()
private Long dbID;
...
}
@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = { Certificate.COL_CERTIFICATEID })
},
name = Certificate.TABLE_NAME)
public class Certificate extends ModelCore {
@Embedded
@AttributeOverrides({
@AttributeOverride(column = @Column(name = COL_CERTIFICATEID), name = "id")
})
private CertificateId certificateId;
public static final String COL_CERTIFICATEID = "ID";
...
}
</code>
<code>@Embeddable()
public class CertificateId {
@Basic()
@Column(name = "id")
private String id;
...
}
@MappedSuperclass()
public class ModelCore {
@Id()
@GeneratedValue()
private Long dbID;
...
}
@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = { Certificate.COL_CERTIFICATEID })
},
name = Certificate.TABLE_NAME)
public class Certificate extends ModelCore {
@Embedded
@AttributeOverrides({
@AttributeOverride(column = @Column(name = COL_CERTIFICATEID), name = "id")
})
private CertificateId certificateId;
public static final String COL_CERTIFICATEID = "ID";
...
}
</code>
@Embeddable()
public class CertificateId {
@Basic()
@Column(name = "id")
private String id;
...
}
@MappedSuperclass()
public class ModelCore {
@Id()
@GeneratedValue()
private Long dbID;
...
}
@Entity
@Table(uniqueConstraints = {
@UniqueConstraint(columnNames = { Certificate.COL_CERTIFICATEID })
},
name = Certificate.TABLE_NAME)
public class Certificate extends ModelCore {
@Embedded
@AttributeOverrides({
@AttributeOverride(column = @Column(name = COL_CERTIFICATEID), name = "id")
})
private CertificateId certificateId;
public static final String COL_CERTIFICATEID = "ID";
...
}
Query code that triggers failure:
<code>Query query = session.createQuery("FROM Certificate WHERE ID=:param")
query.setParameter("param", "beed827cd6814a75961329dd477a2194");
</code>
<code>Query query = session.createQuery("FROM Certificate WHERE ID=:param")
query.setParameter("param", "beed827cd6814a75961329dd477a2194");
</code>
Query query = session.createQuery("FROM Certificate WHERE ID=:param")
query.setParameter("param", "beed827cd6814a75961329dd477a2194");
Resulting exception:
<code> java.lang.IllegalArgumentException: Parameter value [beed827cd6814a75961329dd477a2194] did not match expected type [SqmBasicValuedSimplePath(cmb.domain.model.Certificate(2283051504511200).dbID)]
#0: org.hibernate.query.internal.QueryParameterBindingImpl.setBindValue(QueryParameterBindingImpl.java:124)
#1: org.hibernate.query.spi.AbstractCommonQueryContract.setParameter(AbstractCommonQueryContract.java:842)
#2: org.hibernate.query.spi.AbstractSelectionQuery.setParameter(AbstractSelectionQuery.java:882)
#3: org.hibernate.query.sqm.internal.QuerySqmImpl.setParameter(QuerySqmImpl.java:1200)
#4: org.hibernate.query.sqm.internal.QuerySqmImpl.setParameter(QuerySqmImpl.java:136)
#5: org.mangogrove.infrastructure.persistence.hibernate.AbstractHibernateRepository.findValuesByKey(AbstractHibernateRepository.java:259)
</code>
<code> java.lang.IllegalArgumentException: Parameter value [beed827cd6814a75961329dd477a2194] did not match expected type [SqmBasicValuedSimplePath(cmb.domain.model.Certificate(2283051504511200).dbID)]
#0: org.hibernate.query.internal.QueryParameterBindingImpl.setBindValue(QueryParameterBindingImpl.java:124)
#1: org.hibernate.query.spi.AbstractCommonQueryContract.setParameter(AbstractCommonQueryContract.java:842)
#2: org.hibernate.query.spi.AbstractSelectionQuery.setParameter(AbstractSelectionQuery.java:882)
#3: org.hibernate.query.sqm.internal.QuerySqmImpl.setParameter(QuerySqmImpl.java:1200)
#4: org.hibernate.query.sqm.internal.QuerySqmImpl.setParameter(QuerySqmImpl.java:136)
#5: org.mangogrove.infrastructure.persistence.hibernate.AbstractHibernateRepository.findValuesByKey(AbstractHibernateRepository.java:259)
</code>
java.lang.IllegalArgumentException: Parameter value [beed827cd6814a75961329dd477a2194] did not match expected type [SqmBasicValuedSimplePath(cmb.domain.model.Certificate(2283051504511200).dbID)]
#0: org.hibernate.query.internal.QueryParameterBindingImpl.setBindValue(QueryParameterBindingImpl.java:124)
#1: org.hibernate.query.spi.AbstractCommonQueryContract.setParameter(AbstractCommonQueryContract.java:842)
#2: org.hibernate.query.spi.AbstractSelectionQuery.setParameter(AbstractSelectionQuery.java:882)
#3: org.hibernate.query.sqm.internal.QuerySqmImpl.setParameter(QuerySqmImpl.java:1200)
#4: org.hibernate.query.sqm.internal.QuerySqmImpl.setParameter(QuerySqmImpl.java:136)
#5: org.mangogrove.infrastructure.persistence.hibernate.AbstractHibernateRepository.findValuesByKey(AbstractHibernateRepository.java:259)
For some reason the column value choosen by hibernate is “dbID” (Long) when it should be using “ID” (String). I don’t understand what has changed so much that this is now broken.