Hibernate не поддерживает доступ к полям пользовательских типов для критериев проекции?

Мои занятия:

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

У меня также есть правильно настроенный AccountTypeUserType.

Мой запрос:

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

Проблема, с которой я сталкиваюсь, заключается в том, что мой запрос не работает с...

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

Да, и вы не можете .createAlias("accountType", "at"), потому что accountType не является ассоциацией.

Какие-нибудь мысли?


person Shane Courtrille    schedule 07.01.2011    source источник


Ответы (1)


Как вы, наверное, поняли, UserType не является сущностью. Лучший способ понять, почему вы не можете получить доступ к свойству в UserType, — это использовать URL в качестве примера. Вы не будете запрашивать URL.host, а будете запрашивать сам URL. Вот почему UserType должен знать, как преобразовать String в Object и, например, Object в String. Итак, вам придется использовать что-то вроде этого:

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

Посмотрите на этот пример UserType и тестовый пример для него из набора тестов.

Но я думаю, что настоящий вопрос заключается в том, почему вы не используете Enum (и @Enumerated) вместо этого UserType. Я думаю, что Enum лучше подходит, так как внутри он является UserType, но он «родной» для Hibernate.

person jpkrohling    schedule 08.01.2011
comment
Я хочу умные перечисления с небольшим поведением. Было бы неплохо, если бы я мог получить доступ к материалам в AccountType. вздыхает - person Shane Courtrille; 11.01.2011