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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top