Используется версия с весенней загрузкой: 2.2.6.RELEASE | База данных: SqlServer 2008 | org.hibernate.dialect.SQLServer2008Dialect.
При использовании конвертера для отображения перечисление столбца типа «TINYINT», который будет относиться к «Byte» в java, представляет следующее ошибка:
Нет сопоставления диалекта для JDB C Тип: 277630005, когда ddl спящего режима для начального db.
Однако при выполнении прямого сопоставления как байта без использования перечисления он работает правильно.
Конвертер:
@Converter
public class CharacterClassConverter implements AttributeConverter<CharacterClassIndicator, Byte> {
@Override
public Byte convertToDatabaseColumn(CharacterClassIndicator characterClassIndicator) {
return characterClassIndicator != null ? characterClassIndicator.getCode() : null;
}
@Override
public CharacterClassIndicator convertToEntityAttribute(Byte code) {
return Stream.of(CharacterClassIndicator.values())
.filter(value -> value.getCode().equals(code))
.findFirst()
.orElseThrow(UnsupportedOperationException::new);
}
}
Enum:
public enum CharacterClassIndicator {
DARK_WIZARD(0, "DK", "Dark Wizard"),
SOUL_MASTER(1, "SM", "Soul Master"),
GRAND_MASTER(2, "GM", "Grand Master"),
DARK_KNIGHT(16, "DK", "Dark Knight"),
BLADE_KNIGHT(17, "BK", "Blade Knight"),
BLADE_MASTER(18, "BM", "Blade Master"),
FAIRY_ELF(32, "FE", "Fairy Elf"),
MOUSE_ELF(33, "ME", "Mouse Elf"),
HIGH_ELF(34, "HE", "High Elf"),
DARK_LORD(48, "DL", "Dark Lord"),
LORD_EMPEROR(49, "LE", "Lord Emperor"),
MAGIC_GLADIATOR(64, "MG", "Magic Gladiator"),
DUEL_MASTER(65, "DM", "Duel Master");
private final Byte code;
private final String initials;
private final String name;
CharacterClassIndicator(Integer code, String initials, String name) {
this.code = code.byteValue();
this.initials = initials;
this.name = name;
}
public Byte getCode() {
return code;
}
public String getInitials() {
return initials;
}
public String getName() {
return name;
}
}
Код объекта:
@Entity
@Table(name = "Character")
public class Character {
@Id
@Column(name = "AccountID")
private String id;
@Column(name = "Name")
private String name;
@Column(name = "Class")
@Convert(converter = CharacterClassConverter.class) // if remove this line and change type to Byte, works correctly
private CharacterClassIndicator characterClass;
@Column(name = "cLevel")
private Integer level;
@Column(name = "Strength")
private Short strenght;
@Column(name = "Dexterity")
private Short dexterity;
@Column(name = "Vitality")
private Short vitality;
@Column(name = "Energy")
private Short energy;
@Column(name = "Resets")
private Integer resets;
.... gets and setters
}
Кто-нибудь знает, как решить?