对不起我的英语不好
我在EclipseLink JPA中使用映射实体存在一些问题。我有一些实体:
@Entity
@Table(name = "TSENSOR")
@Cacheable
public class Sensor extends Model implements Serializable {
@EmbeddedId
SensorIdentifier key;
@Column(name = "CDESCRIPTION", columnDefinition = "TEXT")
String description;
@Column(name = "CTYPE")
@Enumerated(EnumType.STRING)
SensorType type;
...
}
@Embeddable
public class SensorIdentifier extends DeviceIdentifier {
@Column(name = "PNUM")
byte num;
...
}
@Embeddable
@MappedSuperclass
public class DeviceIdentifier extends Model implements Serializable {
@Column(name = "PSYSTEM", insertable = false, updatable = false)
String systemName;
@Column(name="PDEVICEID")
int id;
@Column(name="PDEVICESUBID")
short subId;
...
}
在服务器端,此实体映射到Hibernate JPA中并且工作出色。但是在客户端上,我需要在EclipseLink JPA中映射该实体(我使用Eclipse RCP 4.x和Gemini DI),并且我有以下例外情况:
异常[EclipseLink-46](Eclipse Persistence Services-2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DescriptorException异常描述:应该为主键字段[TSENSOR]定义一个非只读映射。 .PSYSTEM]。描述符:RelationalDescriptor(watchdog.core.client.model.Sensor-> [DatabaseTable(TSENSOR)])
仅实体包含EmbeddedId的此问题
该错误表明您应该有一个映射
@Column(name = "PSYSTEM", insertable = false, updatable = false)
String systemName;
可以写入。(非只读)因此对PSYSTEM的另一种映射是true,可插入或可更新。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句