【发布时间】:2014-06-30 07:35:41
【问题描述】:
我已经从数据库中导入了这个实体类(使用 Netbeans 函数 - 来自数据库的实体类)。
不幸的是,我无法让它工作。
IMS_MEASUREMENTS 表
INSTALLED_IMS_ID - NUMBER(9)
MEASUREMENT_IMS_ORD - NUMBER(9)
MEASUREMENT_TYPE_ID - NUMBER(9)
DEVICE_ID - NUMBER(9)
MEASUREMENT_TIME - TIMESTAMP(3)
MEASUREMENT_VALUE - NUMBER(9,2)
MEASUREMENT_MAX_VALUE - NUMBER(9,2)
MEASUREMENT_MIN_VALUE - NUMBER(9,2)
NOTES - VARCHAR(255 BYTE)
PREVIOUS_INFO - NUMBER(5)
LAST_UPDATE - TIMESTAMP(3)
MEASUREMENT_PRECISION - NUMBER(2)
LOCALIZATION_ID - NUMBER(9)
主键是 (INSTALLED_IMS_ID, MEASUREMENT_IMS_ORD)
ImsMeasurements.java
@Entity
public class ImsMeasurements implements Serializable {
@EmbeddedId
protected ImsMeasurementsPK imsMeasurementsPK;
@Column(name = "MEASUREMENT_TYPE_ID")
private Integer measurementTypeId;
@Basic(optional = false)
@Column(name = "MEASUREMENT_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date measurementTime;
@Column(name = "MEASUREMENT_VALUE")
private BigDecimal measurementValue;
@Column(name = "MEASUREMENT_MAX_VALUE")
private BigDecimal measurementMaxValue;
@Column(name = "MEASUREMENT_MIN_VALUE")
private BigDecimal measurementMinValue;
@Column(name = "NOTES")
private String notes;
@Column(name = "PREVIOUS_INFO")
private Integer previousInfo;
@Column(name = "LAST_UPDATE")
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdate;
@Column(name = "MEASUREMENT_PRECISION")
private Short measurementPrecision;
@Column(name = "LOCALIZATION_ID")
private Integer localizationId;
....
....
//constructors
public ImsMeasurements() {
}
public ImsMeasurements(ImsMeasurementsPK imsMeasurementsPK) {
this.imsMeasurementsPK = imsMeasurementsPK;
}
public ImsMeasurements(ImsMeasurementsPK imsMeasurementsPK, Date measurementTime) {
this.imsMeasurementsPK = imsMeasurementsPK;
this.measurementTime = measurementTime;
}
public ImsMeasurements(int installedImsId, int measurementImsOrd) {
this.imsMeasurementsPK = new ImsMeasurementsPK(installedImsId, measurementImsOrd);
}
}
ImsMeasurementsPK.java
@Embeddable
public class ImsMeasurementsPK implements Serializable {
@Basic(optional = false)
@Column(name = "INSTALLED_IMS_ID")
private int installedImsId;
@Basic(optional = false)
@Column(name = "MEASUREMENT_IMS_ORD")
private int measurementImsOrd;
....
//constructors
public ImsMeasurementsPK() {
}
public ImsMeasurementsPK(int installedImsId, int measurementImsOrd) {
this.installedImsId = installedImsId;
this.measurementImsOrd = measurementImsOrd;
}
}
设置测量。
//setting measure primary key
ImsMeasurements mis = new ImsMeasurements(new ImsMeasurementsPK(1, 1));
....
坚持。
em.persist(mis);
我发现这种 java.sql.SQLException: ORA-01438: value greater than specified precision allowed for this column
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-01438: value larger than specified precision allowed for this column
Error Code: 1438
Call: INSERT INTO SICURFER.IMS_MEASUREMENTS (LAST_UPDATE, LOCALIZATION_ID, MEASUREMENT_MAX_VALUE, MEASUREMENT_MIN_VALUE, MEASUREMENT_PRECISION, MEASUREMENT_TIME, MEASUREMENT_TYPE_ID, MEASUREMENT_VALUE, NOTES, PREVIOUS_INFO, MEASUREMENT_IMS_ORD, INSTALLED_IMS_ID, DEVICE_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [13 parameters bound]
Query: InsertObjectQuery(com.ansaldosts.sic.dao.ImsMeasurements[ imsMeasurementsPK=com.ansaldosts.sic.dao.ImsMeasurementsPK[ installedImsId=1, measurementImsOrd=1 ] ])
JPA 提供者 -> EclipseLink,版本:Eclipse Persistence Services - 2.2.0.v20110202-r8913
我尝试插入的值:
mis.setMeasurementValue(BigDecimal.valueOf(110));
mis.setMeasurementTypeId(10);
String s = "2014-04-17 12:05:00";
Date date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ITALY).parse(s);
mis.setMeasurementTime(date);
mis.setMeasurementPrecision(Short.MIN_VALUE);
mis.setMeasurementMinValue(BigDecimal.ZERO);
mis.setMeasurementMaxValue(BigDecimal.ZERO);
mis.setLocalizationId(Integer.valueOf(10));
mis.setDeviceId(2);
mis.setImsSystems(110);
问题出在哪里,我错在哪里?
提前致谢, 弗朗切斯科
【问题讨论】:
-
对象
ImsMeasurements中有一个值比表中的指定列长 -
给我一个可能的解决方案,谢谢
-
你能找出[绑定的13个参数]是什么吗?添加值和 ddl。
-
我认为问题出在从 bin ImsMeasurementsPK 到数据库上的主复合键的映射上,但我不明白原因。映射是使用 Netbeans 函数(“从类创建实体”)从 JPA 自动生成的。
-
我不了解 Netbeans,所以我无法帮助您。
标签: java oracle jpa netbeans eclipselink