Question

Mes classes:

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");
}

J'ai aussi un AccountTypeUserType de configuration correctement.

Ma Recherche:

List results = session.createCriteria(User.class)
   .setProjection(Projections.projectionList()
      .add(Projections.property("accountType.name"), "accountType)
   )
   .setResultTransformer(Transformer.aliasToBean(UserSummary.class))
   .list()

Le problème que je cours en est que ma requête échoue avec ...

org.hibernate.QueryException: could not resolve property: accountType.name of: com.huskyenergy.routecommander.domain.rtc.User

Oh, et vous ne pouvez pas .createAlias ??( "accountType", "à") soit parce que accountType n'est pas une association.

Toutes les pensées?

Était-ce utile?

La solution

Comme vous avez probablement réalisé, un UserType est pas une entité. La meilleure façon de voir pourquoi vous ne pouvez pas accéder à une propriété dans un UserType est d'utiliser URL comme exemple. Vous ne ferez pas une requête demandant URL.host, mais pour lui-même URL. Voilà pourquoi un UserType devrait savoir comment transformer une chaîne en un objet et un objet dans une chaîne, par exemple. , Vous aurez ainsi utiliser quelque chose comme ceci:

.add(Projections.property("accountType.name"), AccountType.User)

Regardez cet exemple UserType et le test pour elle de la suite de tests.

Mais je pense que la question est de savoir pourquoi vous n'utilisez pas Enum (et @Enumerated), au lieu de ce UserType. Je pense qu'un Enum est un meilleur ajustement, car il est à l'intérieur d'un UserType, mais il « natif » de la mise en veille prolongée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top