【问题标题】:JPA Entity from Hibernate to EclipseLink从 Hibernate 到 EclipseLink 的 JPA 实体
【发布时间】:2013-11-08 05:35:53
【问题描述】:

对不起我的英语

我在 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 持久性服务 - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DescriptorException 异常 描述:应该为 主键字段 [TSENSOR.PSYSTEM]。描述符: RelationalDescriptor(watchdog.core.client.model.Sensor --> [数据库表(TSENSOR)])

只有实体包含 EmbeddedId 才会出现此问题

【问题讨论】:

    标签: java hibernate eclipselink


    【解决方案1】:

    错误说你应该有一个映射

    @Column(name = "PSYSTEM", insertable = false, updatable = false)
    String systemName;
    

    可以写入。 (非只读) 因此,PSYSTEM 的另一种映射在 true 上具有可插入或可更新。

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2012-04-06
      • 2012-03-31
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      相关资源
      最近更新 更多