Java Hibernate 5.2.10 Final和MySQL 5.7中的LocalDate存在问题
我在项目中使用了Java8、Hibernate 5.2.10Final和MySQL 5.7。但是我在使用Java Hibernate 5.2.10 Final和MySQL 5.7中的LocalDate存在问题,java,mysql,hibernate,jdbc,localdate,Java,Mysql,Hibernate,Jdbc,Localdate,我在项目中使用了Java8、Hibernate 5.2.10Final和MySQL 5.7。但是我在使用java.time.LocalDate时遇到了一些问题。 有两个实体类: TradeDay.class: @Entity @Table(name = "ENTITY__TRADE_DAY") public class TradeDay { @Id @Column(name = "TRADE_DAY_DATE") private LocalDate date;
java.time.LocalDate
时遇到了一些问题。
有两个实体类:
TradeDay.class:
@Entity
@Table(name = "ENTITY__TRADE_DAY")
public class TradeDay {
@Id
@Column(name = "TRADE_DAY_DATE")
private LocalDate date;
........
@OneToMany(targetEntity = Transaction.class, mappedBy = "tradeDay", cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.EXTRA)
private Set<Transaction> transactionSet=new LinkedHashSet<>();
........
}
然后我遇到的问题是:
1.当我在HQL中使用LocalDate
作为键时,SQL中的最终值将是上一个日期。例如:
@Override
public List<Transaction> getTransactionList(LocalDate date) {
Session session = HibernateSessionManager.getCurrentSession();
Query<Transaction> query = session.createQuery("from Transaction t where t.date=? order by t.index asc", Transaction.class);
query.setParameter(0,date);
return query.list();
}
输出如下:
//Just a count SQL because of @LazyCollection(LazyCollectionOption.EXTRA)
Hibernate: select count(TRANSACTION_INDEX) from ENTITY__TRANSACTION where TRADE_DAY_DATE =?
//count SQL got 4 result
1990-12-20 complete with 4 records.
//Iterate set, real SQL
Hibernate: select ...... from ENTITY__TRANSACTION transactio0_ where transactio0_.TRADE_DAY_DATE=?
//No index output???
//SQL by getTransactionList
Hibernate: select ...... from ENTITY__TRANSACTION transactio0_ where transactio0_.TRANSACTION_DATE=? order by transactio0_.TRANSACTION_INDEX asc
//Got 4 result too
1990-12-20 complete with 4 records.
//Success print the index
5535748
5882738
5925376
6165413
如何解决这些问题?感谢您的帮助。最近,当某人的数据库与另一台服务器上的时区不同时,这引起了很大的噪音。这里有讨论和建议的解决方案,它们告诉您哪些属性要更改为JDBC url和Hibernate配置。您正在使用的MySql驱动程序版本是什么?另外,您是否可以更改您的连接配置,主要是
URL
property?@fujy驱动程序版本是mysql连接器java 6.0.6,connection.URL
是jdbc:mysql://192.168.1.122/quant
@coladict感谢您的帮助。实际上,我的客户端和服务器具有相同的时区(亚洲/上海)。我尝试使用属性hibernate.jdbc.time\u zone,但结果没有任何差别。
......//Before, get a TradeDay entity
Set<Transaction> transactionSet=tradeDay.getTransactionSet();
System.out.println(tradeDay.getDate()+" complete with "+transactionSet.size()+" records.");
for(Transaction transaction:transactionSet){
System.out.println(transaction.getIndex());
}
//Impl of `getTransactionList` is the code above
List<Transaction> transactionList=DAOManager.getTransactionDAO().getTransactionList(tradeDay.getDate());
System.out.println(tradeDay.getDate()+" complete with "+transactionList.size()+" records.");
for(Transaction transaction:transactionList){
System.out.println(transaction.getIndex());
}
//Just a count SQL because of @LazyCollection(LazyCollectionOption.EXTRA)
Hibernate: select count(TRANSACTION_INDEX) from ENTITY__TRANSACTION where TRADE_DAY_DATE =?
//count SQL got 4 result
1990-12-20 complete with 4 records.
//Iterate set, real SQL
Hibernate: select ...... from ENTITY__TRANSACTION transactio0_ where transactio0_.TRADE_DAY_DATE=?
//No index output???
//SQL by getTransactionList
Hibernate: select ...... from ENTITY__TRANSACTION transactio0_ where transactio0_.TRANSACTION_DATE=? order by transactio0_.TRANSACTION_INDEX asc
//Got 4 result too
1990-12-20 complete with 4 records.
//Success print the index
5535748
5882738
5925376
6165413