Oracle에서 JPA로 날짜와 시간을 저장하는 방법은 무엇입니까?
WebSphere 7(Java EE 5) 및 OpenJPA 1.2.1을 사용하고 있습니다.
"이 JPA 개체가 있습니다.modifiedTimestamp
속성, 다음과 같은 것:
@Entity
public class Widget {
/* ... */
private java.sql.Date modifiedTimestamp;
/* ... */
}
Oracle 데이터베이스의 관련 필드가 유형입니다.DATE
.
그렇게 날짜를 정했습니다...
myWidget.setModifiedTimestamp(new java.sql.Data(System.currentTimeMillis());
그리고 저장되지만, 제가 그것을 다시 읽었을 때, 하루의 시간이 저장되지 않았을 때, 그것은 24시에 돌아올 수 있습니다.
이것은 JPA에 관한 것입니까, 아니면 오라클에 관한 것입니까?어떤 제안이든 대단히 감사합니다!
감사해요.
필드에 메모를 하고 유형을 변경하면 다음과 같은 도움이 됩니다.
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date modifiedTimestamp;
사용하다@Temporal(TemporalType.TIMESTAMP)
(자바독스).java.util과 결합됩니다.날짜.
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATE_FIELD")
private java.util.Date modifiedTimestamp;
이 질문이 얼마 전에 나온 질문인 것 같으니 이 기사를 읽어보는 것이 좋습니다.Java 8 date type이 도입된 후 몇 가지 변경 사항이 있습니다.이 질문에 대한 답이 아니고 제가 가지고 있던 문제가 달랐다는 것을 알지만, 저는 이 글을 올립니다.@Temporal()
답변에서 본 주석은 CI 파이프라인이 손상된 것이었습니다.
효과:
@NotNull
@Column(nullable = false, columnDefinition = "TIME") // this bit is different
@JsonFormat(pattern="HH:mm")
private LocalTime startTime;
이것은 그렇지 않습니다.
@NotNull
@Column(nullable = false)
@Temporal(TemporalType.TIME)
@JsonFormat(pattern="HH:mm")
private LocalTime startTime;
유형을 다음으로 변경하는 경우java.sql.Timestamp
그리고 또한 추가하지 않고 작동해야 합니다.@Temporal
주석이 달린 음이온
private java.sql.Timestamp modifiedTimestamp;
물론 Oracle에서는 필드를 TIMESTAMP로 변경합니다.
Java, MySQL db 및 OpenJPA2의 datetime 필드를 처리하는 방법입니다.필드가 java.util 유형이 되었으면 합니다.캘린더, dbfield datetime 및 dbvalue를 UTC 값으로 지정합니다.Mysql은 시간대에 대해 아무것도 모르기 때문에 사용자 지정 변환기를 사용하여 "yyyy-MM-dd HH:mm:ss" 문자열을 설정하고 읽을 수 있습니다.여전히 유효한 datetime sql 열 및 java.util입니다.엔티티 빈에 있는 달력입니다.
@Entity @Table(name="user") @Access(AccessType.FIELD)
public class User {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id; // primary key (autogen surrogate)
private String name;
@Column(name="updated_utc") // use custom serializer so that UTC-stringified
@Temporal(TemporalType.TIMESTAMP) // db datetime is properly set to calendar instance
@Factory("JPAUtil.db2calendar") @Externalizer("JPAUtil.calendar2db")
private Calendar updated;
public long getId() { return id; }
public void setId(long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name=name; }
public Calendar getUpdated() { return updated; }
public void setUpdated(Calendar cal) { updated=cal; }
}
- - -
public class JPAUtil {
public static final TimeZone TIMEZONE_UTC = TimeZone.getTimeZone("UTC");
public static String calendar2db(Calendar val, StoreContext ctx) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TIMEZONE_UTC);
return df.format(cal.getTime()); // return date as UTC string value
}
public static Calendar db2calendar(String val, StoreContext ctx) {
try {
// returned calendar is using a default timezone, val was set as utc string
return DateUtil.parseDateTimeFromUTC(val);
} catch (Exception ex) {
return null;
}
}
}
- - -
CREATE TABLE user (
id bigint NOT NULL auto_increment,
name varchar(64) NOT NULL default '',
updated_utc datetime NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY USERNAME (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
ps: DateUtil은 몇 가지 기본 변환을 제공하는 랜덤 util 클래스입니다.
언급URL : https://stackoverflow.com/questions/10819862/how-to-store-date-and-time-with-jpa-in-oracle
'sourcecode' 카테고리의 다른 글
'ngForOf'는 'tr'의 알려진 속성이 아니므로 바인딩할 수 없습니다(최종 릴리스). (0) | 2023.06.23 |
---|---|
Python에서 환경 변수 읽기 및 쓰기? (0) | 2023.06.23 |
java.sql.SQL 예외:jdbc:microsoft:sqlserver에 적합한 드라이버를 찾을 수 없습니다. (0) | 2023.06.23 |
ASP.NET MVC 4 베타를 설치한 후 InvalidCastException이 느려짐 (0) | 2023.06.18 |
Oracle 12c 설치에서 임시 위치에 액세스하지 못했습니다. (0) | 2023.06.18 |