【发布时间】:2011-12-01 07:22:15
【问题描述】:
我正在努力尝试使用以下代码将地图持久化到 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 numeric(19,0) not null,availabilities double precision null,availabilities_KEY datetime null,主键(OnlineReport_id,availabilities_KEY))
错误 ~ 无法在表 'OnlineReport_availabilities' 中为可为空的列定义 PRIMARY KEY 约束。
我的印象是我缺少一些“可用性”的注释定义。
【问题讨论】:
-
该表是否确实存在于数据库中? SQLServer 中表名的大小是否有限制?
-
该表不存在,但 JPA 和 play 通常会自动创建表。我尝试手动重新创建具有相同名称和虚拟字段的表,没有问题。
-
我注意到 OnlineReport 表上的“可用性”存储为 varbinaries(255)。我不确定这与 hibermate 应该创建的 OnlineReport_availabilities 表有什么关系。
-
你班级的主键是什么?您应该明确定义一个。我倾向于尽可能使用自动生成的。
标签: java hibernate collections playframework jpa-2.0