繁体   English   中英

无法使用JPA保留哈希图

[英]Cannot persist hashmap with JPA

我正在努力尝试使用以下代码将映射持久化到SQLserver,并不断出现以下错误:

*由以下原因引起:com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称“ OnlineReport_availabilities”。 *

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

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


   @Entity
    public class OnlineReport extends Model {

    @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();
        }
    }
}


更新。

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

错误〜不成功:创建表OnlineReport_availabilities(OnlineReport_id数字(19,0)不为null,可用性为双精度null,availability_KEY datetime为null,主键(OnlineReport_id,availabilities_KEY))

错误〜无法在表'OnlineReport_availabilities'中的可为空的列上定义PRIMARY KEY约束。

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

您可能没有这样的表,或者无法通过使用中的连接对其进行访问。 对象(表,字段等)名称在db中是否区分大小写?

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

@MapKeyColumn(columnDefinition = "datetime not null")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM