В моей таблице базы данных есть столбец CHAR(1)
, который может содержать Y или N в качестве содержимого (ограничение CHECK). Я определил свойство String в Java и String-based setter в моем классе. Кроме того, для удобства я добавил setter/getter с булевыми аргументами.Как Hibernate отображает сеттеры/геттеры для свойств?
Мое предположение заключалось в том, что Hibernate использует сеттер/получатель на основе String для доступа к базе данных. Однако во время выполнения я получаю IllegalArgumentExceptions и несоответствие типов между булевыми и String.
Итак, на основе каких свойств Hibernate выполняет сопоставление? Имена методов? Имена аргументов? Типы аргументов? Можно ли использовать final
в сеттере или это может случиться? Не имеет значения, если мое свойство имеет другое имя, чем мой столбец таблицы?
private String foobar = "N";
public void setFoobar(final String foobar) {
this.foobar = foobar;
}
@Column(name = "FOOBAR")
public String getFoobar() {
return this.foobar;
}
@Transient
public void setFoobar(final boolean foobar) {
this.setFoobar(foobar ? "Y" : "N");
}
@Transient
public boolean isFoobar() {
return (this.getFoobar().equals("Y") ? true : false);
}
Вы должны попробовать с @Column (name = "FOOBAR", columnDefinition = "CHAR") public Character getFoobar() – MGorgon