Я пишу приложение на основе уже существующей базы данных (postgreSQL), используя JPA и Hibernate. В таблице есть столбец int2 (activeYN), который используется как логическое значение (0 => false (неактивно), а не 0 => true (активно)). В приложении Java я хочу использовать этот атрибут как логическое значение. Итак, я определил атрибут следующим образом:
@Entity
public class ModelClass implements Serializable {
/*..... some Code .... */
private boolean active;
@Column(name="activeYN")
public boolean isActive() {
return this.active;
}
/* .... some other Code ... */
}
Но есть исключение, потому что Hibernate ожидает логическое поле базы данных, а не int2.
Могу ли я сделать это отображение в любом случае при использовании логического значения в Java ??
У меня есть возможное решение для этого, но мне не очень нравится:
Мое "хакерское" решение таково:
@Entity
public class ModelClass implements Serializable {
/*..... some Code .... */
private short active_USED_BY_JPA; //short because i need int2
/**
* @Deprecated this method is only used by JPA. Use the method isActive()
*/
@Column(name="activeYN")
public short getActive_USED_BY_JPA() {
return this.active_USED_BY_JPA;
}
/**
* @Deprecated this method is only used by JPA.
* Use the method setActive(boolean active)
*/
public void setActive_USED_BY_JPA(short active) {
this.active_USED_BY_JPA = active;
}
@Transient //jpa will ignore transient marked methods
public boolean isActive() {
return getActive_USED_BY_JPA() != 0;
}
@Transient
public void setActive(boolean active) {
this.setActive_USED_BY_JPA = active ? -1 : 0;
}
/* .... some other Code ... */
}
Есть ли другие способы решения этой проблемы?
Значение «hibernate.hbm2ddl.auto» в конфигурации hibernate установлено на «validate».
(извините, мой английский не самый лучший, надеюсь, вы все равно это понимаете) ..