Domanda

I miei Corsi:

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

Ho anche una corretta messa a punto AccountTypeUserType.

La mia domanda:

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

Il problema che ho incontrato è che la mia domanda non riesce con ...

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

Oh e non è possibile .createAlias ??( "accountType", "a"), o perché accountType non è un'associazione.

Qualche idea?

È stato utile?

Soluzione

Come probabilmente vi siete resi conto, un UserType non è un'entità. Il modo migliore per vedere il motivo per cui non è possibile accedere a una proprietà in un UserType è quello di utilizzare URL come l'esempio. Non sarà fare una query per chiedere URL.host, ma per URL stesso. Ecco perché un UserType dovrebbe sapere come trasformare una stringa in un oggetto e un oggetto in stringa, per esempio. Quindi, dovrete usare qualcosa di simile a questo:

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

Guarda questo esempio UserType e il banco di prova per esso dalla suite di test.

Ma penso che la vera domanda è perché non si utilizza un Enum (e @Enumerated), al posto di questo UserType. Penso che un Enum è una misura migliore, in quanto si tratta di un interno UserType, ma è "nativo" per Hibernate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top