Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > тип ENUM в Hibernate


Автор: fath_fast 9.7.2008, 20:41
САБЖ! не знаю как.
Нашёл только это http://appfuse.org/display/APF/Java+5+Enums+Persistence+with+Hibernate

А есть менее громоздкий вариант? что-то вроде:
Код

 @Column(name = "st", columnDefinition="ENUM('true', 'false')")



Автор: ivg 10.7.2008, 00:45
По моему ничего делать то и не надо. Hibernate сам с этим разбирается. Ну или я не понял в чём загвоздка.  smile

Автор: fath_fast 10.7.2008, 05:17
ivg,
Цитата

Hibernate сам с этим разбирается.

Просто хотелось немного ему помочь в этом  smile 

Автор: fath_fast 10.7.2008, 06:23
Кстати, не заботится об этом Hibernate сам, если вот такой аннотацией 
Код

 @Column(name = "st")

определить столбей типа ENUM, то получится ИСключение:
Код

org.hibernate.HibernateException: Wrong column type: st, expected: varchar(255)

Автор: ivg 10.7.2008, 08:49
Какойто у вас неправильный мёд © smile 
Нельзя ли поподробнее?

Автор: fath_fast 10.7.2008, 09:21
ivg, поподробней?
Пожалуйста! smile
Есть в одной таблице БД (MySql) один столбец, который в принципе должен принимать только одно из двух значений true или false...
А это значит неплохо бы заюзать тип ENUM в БД... Но за незнанием способа описать свойства этого стобца при помощи аннотаций в Hiberante, приходиться обходиться обычным VARCHAR (в БД).

я предпринял попытку  подсунуть хибернэйту столбец типа ENUM,  а в аннотациях указал только  @Column(name = "st") (st - это поле в БД)... На что Hibernate тут же на меня возмутился сим исключением :
Код

org.hibernate.HibernateException: Wrong column type: st, expected: varchar(255)

Вот.

Автор: ivg 10.7.2008, 11:42
Код

public enum Gender {
    unknown,
    male,
    female    
}

Код

@Entity
public class Person {
    
    public Person() {
        super();
    }
...
    @Column(name="gender", columnDefinition="enum('male', 'female', 'unknown')")
    @Enumerated(EnumType.STRING)
    private Gender gender;
...
    public Gender getGender() {
        return gender;
    }
    
    public void setGender(Gender gender) {
        this.gender = gender;
    }
...
}

Вот пример решения, как вы хотели. Обратите внимание, оно не переносимо и будет работать только с MySQL. Так же строка enum в значении columnDefinition должна быть в нижнем регистре, иначе валидация не проходит.

Автор: fath_fast 10.7.2008, 14:43
ivg, Большое спасибо! 

Автор: heizer 23.3.2009, 12:58
можно так columnDefinition = "enum" етого хватает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)