gpt4 book ai didi

java - 无法使用 JPA 持久保存 HashMap

转载 作者:行者123 更新时间:2023-12-01 15:43:11 27 4
gpt4 key购买 nike

我正在努力尝试使用下面的代码将映射持久保存到 SQLserver,并不断收到以下错误:

* 导致:com.microsoft.sqlserver.jdbc.SQLServerException:对象名称“OnlineReport_availability”无效。 *

我使用 Play 框架 JPA 来实现此目的,之前已经使用类似的代码成功地保存了 Maps。我尝试在数据库中手动创建表以查看名称是否有任何问题,但一切似乎都正常。

我在这里做了一些非常规或不正确的事情?


@Entity
public class OnlineReport extends Model {<p></p>

<pre><code> @Temporal(TemporalType.DATE)
public Date date;

@ElementCollection
public Map<Date, Double> availabilities;

public OnlineReport(){
this.date = new Date();
this.availabilities = new HashMap<Date, Double>();
}

public void addAvailability(double availability){
TreeSet<Date> set = new TreeSet(availabilities.entrySet());

Date lastEntry = null;
if(!set.isEmpty())
lastEntry = set.last();

Date now = new Date();
if(lastEntry != null){
//Add availibility every 10mn
if(DateUtil.getMinutesBetween(lastEntry, now) >= 10){
availabilities.put(now, availability);
save();
}
} else {
availabilities.put(now, availability);
save();
}
}
}
</code></pre>

<p></p>

<小时/>

更新。

在 debugSQL 中运行 JPA 我注意到以下错误:

错误〜不成功:创建表OnlineReport_availability(OnlineReport_id numeric(19,0)不为空,可用性 double 为空,availities_KEY日期时间为空,主键(OnlineReport_id,availability_KEY))

错误 ~ 无法在表“OnlineReport_availability”中的可空列上定义 PRIMARY KEY 约束。

我的印象是我缺少一些“可用性”的注释定义。

最佳答案

您可能没有这样的表,或者无法通过使用中的连接访问它。数据库中的对象(表、字段等)名称区分大小写吗?

所以,在您更新后,我们知道为什么您没有表格。看起来它无法为作为键一部分的列创建 not null 约束。 Dialect 对于 SQL Server 失败,因为您的映射很小,但是是正确的。您可以尝试通过添加以下注释来强制它:

@MapKeyColumn(columnDefinition = "datetime not null")

当然,如果每毫秒可能有多个条目,那么将日期时间作为键的一部分会产生问题。

关于java - 无法使用 JPA 持久保存 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658770/

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