我正在努力尝试使用下面的代码将地图持久保存到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)不为空,可用性为double precision null,availability_KEY datetime为null,主键(OnlineReport_id,availabilitysilities_KEY))
错误〜无法在表'OnlineReport_availabilities'中的可空列上定义PRIMARY KEY约束。
我的印象是我缺少一些'可用性'的注释定义。
答案 0 :(得分:1)
可能您没有这样的表,或者无法通过连接使用。对象(表,字段等)在db?
中是否区分大小写因此,在您更新后我们知道您没有桌子的原因。看起来它无法为作为密钥一部分的列创建非null -constraint。对于SQL Server,Dialect失败,因为您的映射很少,但是正确。您可以尝试通过添加以下注释来强制它:
@MapKeyColumn(columnDefinition = "datetime not null")
当然,如果每毫秒可能存在多个条目,则将日期时间作为密钥的一部分会产生问题。