Hibernate no admite el acceso a los campos de usertypes de criterios de proyección?
-
08-10-2019 - |
Pregunta
Mis Clases:
public class User
{
@Type(type="AccountType")
private AccountType accountType;
}
public class AccountType
{
private String name;
private AccountType(String name)
{
this.name = name;
}
public static AccountType User = new AccountType("User");
public static AccountType Administrator = new AccountType("Administrator");
}
También tiene una configuración adecuada AccountTypeUserType.
Mi consulta:
List results = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("accountType.name"), "accountType)
)
.setResultTransformer(Transformer.aliasToBean(UserSummary.class))
.list()
El problema me encuentro es que mi consulta falla con el ...
org.hibernate.QueryException: could not resolve property: accountType.name of: com.huskyenergy.routecommander.domain.rtc.User
Ah, y no se pueden guardar .createAlias ??( "accountType", "a"), ya sea porque accountType no es una asociación.
¿Alguna idea?
Solución
A medida que probablemente se dio cuenta, una UserType no es una entidad. La mejor manera de ver por qué no se puede acceder a una propiedad en un UserType es utilizar URL
como el ejemplo. Usted no va a hacer una consulta pidiendo URL.host, pero por sí misma URL. Es por eso que una UserType debe saber cómo transformar una cadena en un objeto y un objeto en cadena, por ejemplo. Por lo tanto, usted tendrá que usar algo como esto:
.add(Projections.property("accountType.name"), AccountType.User)
Look at este ejemplo UserType y el caso de prueba para que de la serie de pruebas.
Sin embargo, creo que la verdadera pregunta es por qué no se está utilizando una enumeración (y @Enumerated), en lugar de esta UserType. Creo que una enumeración es una mejor opción, ya que es en su interior un UserType, pero de "nativo" a Hibernate.