스프링 부트 JPA 휴지 상태 - 밀리초의 정밀도로 저장 날짜
'2.3.' RELEASE'입니다.
11 1111
org..org. springframework 트: : spring - boot - jdbc
org..org. springframework 명령: spring-boot-data-jpa
spring-data-jpa-2.3.4.
파일:
DB DB MariaDB(버전 10.5.5-MariaDB)
Java MariaDB J:2.6.0 [Java MariaDB]
java.sql을 유지하려고 합니다.밀리초의 정밀도로 휴지 상태의 타임스탬프 개체입니다.날짜를 밀리초 단위로 DB에 저장해야 합니다.예를 들어 2020-10-08 03:23:38.454 입니다.
내 도메인:
import java.sql.Timestamp;
@Entity
@Data
@Table(name = "date_test")
public class DateTestDomain {
@Id
@Column(nullable = false, name = "date", columnDefinition = "TIMESTAMP(3)")
@Temporal(TIMESTAMP)
private Calendar dateTest;
}
내 보고서:
@Repository
public interface DateTestRepo extends JpaRepository<DateTestDomain, Timestamp> {
}
db에 날짜 저장:
private final JdbcTemplate db;
...
long testTime = 1602120218454L;
Timestamp dateTimeStamp = new Timestamp(testTime);
db.update("INSERT INTO date_test" + " (date) VALUES( \"" + dateTimeStamp + "\")");
UPD: SQL 결과는 내가 원하는 대로 정확합니다!!!이 방법은 완벽합니다: 2020-10-08 03:23:38.454
, 휴지 상태에서는, 「」/ 의 는 FALSE가 .PA FALSE FALSE.
다음 중 하나:
값2020-10-09 22:26:53.120 입니다.
TRACE [ Main 2020-10-09 22:26:53.122 TRACE 95038 --- [ ]o.h.type.descriptor.sql. Binder : [ TIMESTamp [ - 10 - 22 ::. ]- [ TIMESTAMP ]- [ 2020 - 10 - 09 22 : 26 : 53 . 044 ]로서의 파라미터
Calendar calendar = Calendar.getInstance();
Date date = new Date();
calendar.setTimeInMillis(date.getTime());
dateTestDomain.setDateTest(calendar);
dateTestRepo.save(dateTestDomain);
sql 결과: hibernate sql insert를 사용하면 fractional secondsql insert:
2020-10-09 22:26:53.000
제발 도와주세요.밀리초의 정밀도 JPA로 db 시간을 절약해야 합니다.
업데이트:
사투리 sql을 합니다.
org.hibernate.dialect.org.certificate 를 syslog.syslog.syslog를 사용합니다.MySQL5InnoDBDialect org.hibernate.dialect하다MySQL55InnoDBDialect org.hibernate.dialect하다MariaDB103 org.hibernate.dialect 。
성공하지 못하고
1 : 데:1 :
: INSERT date_test (, ) (NOW(3), ?) date_test timtim ( timestamp, local_date_timea)
TRACE [ 20-10-15:33:29.099 TRACE 44072 --- [ restartedMain ]o.h.type.descriptor.sql. Binder : [ TIMESTamp [ - 10 - : . ]- [ TIMESTAMP ]- [ 2020 - 10 - 15 : 33 : 29 . 051 ]로서의 파라미터
TRACE [ sql20-10-15:33:29.100 TRACE 44072 --- [ main ]o.h.type.descriptor.sql.기본 바인더 : [ TIMestamp ]- [ java . util ] ] [ 2 ]2 。GregorianCalendar[volid=1602336809051,areFieldsSet=true...
SQL 과 sqlSQL:
20-10 15:33:29.101, 2020-10 13:33:29.000, 2020-10 15:33:29.000.000.
을 사용하다
DB 짜 :
1657820-10 16:19:42.578
1600020-10 16:20:47.00020-10 16:47.000
1688820-10 16:20:47.888
2020-10-10 16:20:47.892
2020-10-10 16:20:47.896
2020-10-10 16:20:47.900
휴지 상태: date_test datetestdo0_에서 datetestdo0_.timestamp를 timeam1_0_로 선택합니다.여기서 datetestdo0_.timestamp>?
바인딩 파라미터 [1]를 [TIMESTamp]- [2020-10-10 16:20:47.893]
2020-10-10 16:20:47.888
2020-10-10 16:20:47.892
2020-10-10 16:20:47.896
2020-10-10 16:20:47.9
jdbcsql:
date_test에서 타임스탬프를 선택합니다.여기서 timestamp>"timep-10 16:20:47.893"
2020-10-10 16:20:47.896
2020-10-10 16:20:47.900
jpa/certificate가 밀리초 동안 작동하지 않음...
JPA 2.2 이후 java8 date and time API가 지원됩니다.당신의 문제를 해결할 수 있을지는 아직 시도하지 않았지만 자바8로 시도해 볼 수 있나요?LocalDateTime
Calendar
discloss.discloss.
대체:
@Id
@Column(nullable = false, name = "date", columnDefinition = "TIMESTAMP")
@Temporal(TIMESTAMP)
private LocalDateTime localDateTime;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(calendar.getTimeInMillis());
새로운 Date()를 사용하지 말고 이것을 사용해 보세요.
타임라인상의 단일 순간 포인트를 모델링하는 Instant를 사용하는 것이 좋습니다.
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Instant now = Instant.now();
System.out.println(now);
// Instant to milliseconds
System.out.println(now.toEpochMilli());
// Milliseconds to Instant
Instant moment = Instant.ofEpochMilli(1602120218454L);
// Print the default representation i.e. Instant#toString
System.out.println(moment);
// Which is same as the following output
String strTimestampDefaultFormat = moment.toString();
System.out.println(strTimestampDefaultFormat);
// Custom representation with milliseconds precision
String strTimestamp = moment.atOffset(ZoneOffset.UTC)
.format(DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS"));
System.out.println(strTimestamp);
}
}
샘플 실행의 출력:
2020-10-08T13:44:46.765240Z
1602164686765
2020-10-08T01:23:38.454Z
2020-10-08T01:23:38.454Z
2020-10-08 01:23:38.454
★★★★★★★★★★★★★★★★ strTimestamp
얻은 ) 치환할 수 .
sql.append(" (date) VALUES( \"").append(dateTimeStamp).append("\")");
와 함께
sql.append(" (date) VALUES( \"").append(strTimestamp).append("\")");
언급URL : https://stackoverflow.com/questions/64262300/spring-boot-jpa-hibernate-storing-date-with-millisecond-precision
'programing' 카테고리의 다른 글
Maven 빌드 실패: "Javac 컴파일러를 찾을 수 없음: jre 또는 jdk 문제" (0) | 2023.01.22 |
---|---|
괄호 사이의 텍스트 제거 PHP (0) | 2023.01.22 |
dict 목록에서 값 목록 가져오기 (0) | 2023.01.22 |
Python 'for' 루프에서 범위 지정 (0) | 2023.01.22 |
SQL 순서 문자열(숫자) (0) | 2023.01.22 |