저는 MySQL에 데이터베이스를 가지고 있고 1 열에 24 시간보다 더 많은 시간과 분, 초를 저장하고 싶습니다. 날짜와 관련이 없습니다.JPA를 통해 MySQL에 시간을 저장하십시오.
MySQL을 몇 가지 연구를하고 후에 내가 저장하려고하면 컬럼에 가장 적합한 유형 내가 열 유형 테이블을 나타내는 엔티티를 생성 한 자바에서는 TIME
이 java.sql.Time
입니다 수로 결정 예를 들어 192 시간 동안 나는 new Time((stf.parse("192:00:00")).getTime())
을 사용하고 있지만 이것이 작동하지 않습니다.
더 좋은 방법이 있을까요, 아니면 시간을 절약 할 수있는 다른 방법이 있습니까? 지금 Entity 클래스가 올바른지 확인하기 위해 테스트를 작성 중이므로 NamedQueries
또는 엔티티 관리자를 사용하지 않는 이유가 무엇인지 확인하십시오.
내 엔티티 클래스 뺀 생성자와 게터/세터
@Entity
@Table(name="hourslog", uniqueConstraints= {@UniqueConstraint(columnNames="idLog")})
public class HrsLog {
@Id
@GeneratedValue
@Column(unique=true, nullable=false, updatable=false)
private int idLog;
@ManyToOne(cascade=CascadeType.PERSIST, fetch=FetchType.LAZY)
@JoinColumn(name="idUser", nullable=false, updatable=false)
private User user;
@Column(nullable=false)
private Timestamp startDate;
@Column(nullable=false)
private Timestamp endDate;
@Column(nullable=false)
private Time hrs;
}
전화 엔티티 생성자 및 dB로 저장
테스트를 실행하지만 DB의 열이 나타날 때 오류가 표시되지 않습니다private static void createHrsLog() {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
/*
* Get user from db
*/
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
SimpleDateFormat stf = new SimpleDateFormat("HH:mm:ss");
HrsLog hrs;
try {
hrs = new HrsLog(user, new Timestamp((sdf.parse("01-01-2014 00:00:00")).getTime()), new Timestamp((sdf.parse("31-12-2014 23:59:59")).getTime()), new Time((stf.parse("192:00:00")).getTime()));
session.save(hrs);
session.getTransaction().commit();
} catch (ParseException e) {
System.err.println("Error in time formatting");
e.printStackTrace();
}
}
00:00:00
으로 표시되지 않습니다. 192:00:00
이 예상 값입니다.
이 경우 사용자 수를 저장하고 싶습니다. 예를 들어 시작 날짜와 종료 날짜 사이에 로그인해야합니다. java.sql.Time
는 밀리 초 정밀, 특정의 시점을 나타내는 java.util.Date
클래스 주위에 그냥 얇은 래퍼이기 때문에
* 시간 수가 24 시간보다 길고 날짜와 관련이없는 * 이유로 'TIME'을 사용하는 이유 *? –
무엇이 잘못 되었습니까? 정수입니까? – nablex
@nablex 나는'INT'를 사용하려고 생각했으나 42Hrs와 40min을 저장하고 싶다면 10 진수로 변환해야하고'FLOAT'를 사용하면 40 분이 0.666이므로 반드시 정확하지는 않습니다. ... –