При использовании сущностей JPA в сочетании с Oracle 10g наблюдается следующее очень раздражающее поведение.
Предположим, у вас есть следующая сущность.
@Entity
@Table(name = "T_Order")
public class TOrder implements Serializable {
private static final long serialVersionUID = 2235742302377173533L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "activationDate")
private Calendar activationDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Calendar getActivationDate() {
return activationDate;
}
public void setActivationDate(Calendar activationDate) {
this.activationDate = activationDate;
}
}
Этот объект сопоставлен с Oracle 10g, поэтому в БД будет таблица T_ORDER с столбцом NUMBER первичного ключа "ID" и столбцом TIMESTAMP "ActivDate".
Предположим, я создал экземпляр этого класса с датой активации "15. Sep 2008 00:00 AM". Мой местный часовой пояс CEST, который GMT + 02: 00. Когда я сохраняю этот объект и выбираю данные из таблицы T_ORDER, используя sqlplus, я обнаруживаю, что в таблице фактически хранится «14. Sep 2008 22:00», что пока нормально, потому что часовой пояс ob db - GMT.
Но теперь раздражающая часть. Когда я читаю эту сущность обратно в свою программу JAVA, я обнаруживаю, что часовой пояс оракула игнорируется, и я получаю «14. Sep 2008 22:00 CEST», что, безусловно, неверно.
Таким образом, при записи в БД информация о часовом поясе будет использоваться, а при чтении она будет игнорироваться.
Есть ли какое-нибудь решение для этого там? Я полагаю, что самое простое решение - установить часовой пояс Oracle dbs на GMT + 02, но, к сожалению, я не могу этого сделать, поскольку другие приложения используют тот же сервер.
Мы используем следующую технологию
MyEclipse 6.5
JPA с Hibernate 3.2
Oracle 10g тонкий драйвер JDBC