sourcecode

Oracle에서 JPA로 날짜와 시간을 저장하는 방법은 무엇입니까?

copyscript 2023. 6. 23. 22:21
반응형

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

반응형