gpt4 book ai didi

java - 通过 JPA 为 MySQL 节省时间

转载 作者:行者123 更新时间:2023-11-29 05:21:03 25 4
gpt4 key购买 nike

我在 MySQL 中有一个数据库,在 1 列中我想保存大于 24 小时的小时数、分钟数和秒数,并且不与任何日期相关联。

在对 MySQL 进行了一些研究之后,我决定将列的最佳类型设置为 TIME

在 Java 中,我创建了表示列类型为 java.sql.Time

的表的实体

例如,当我尝试将时间保存 192 小时时,我正在使用 new Time((stf.parse("192:00:00")).getTime()) 但这确实不行。

是否有更好的方法来执行此操作,或者是否有其他方法可以节省时间?我现在正在编写一个测试来检查我的实体类是否正确,这就是我不使用 NamedQueries 或实体管理器的原因。

我的实体类减去了构造函数和 getters/setters

@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;


}

调用实体构造函数并保存到数据库

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 这是预期值

例如,在这种情况下,我想存储用户在开始日期和结束日期之间可以登录的小时数。

最佳答案

你在数据库中得到 00:00:00 因为 java.sql.Time只是 java.util.Date 的薄包装表示特定时刻的类,精度为毫秒。而一天只有24小时。因此,您可以在 java.sql.Time 中存储从 00:00:0023:59:59 的值。

(new Time((stf.parse("192:00:00")).getTime()) -> 192 % 24 = 0 - 尝试例如使用 193:00:00,您将在数据库中看到 01:00:00。)

要在数据库中存储小时数,请使用 long 类型并将小时数转换为秒或毫秒(如果您需要更高的精度)。这是一个非常简单的转换,无论如何,当涉及到用时间做一些逻辑时,你可能会更好。

关于java - 通过 JPA 为 MySQL 节省时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25723388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com