【问题标题】:make a entity class rows read-only in JPA在 JPA 中将实体类行设为只读
【发布时间】:2010-08-26 05:01:12
【问题描述】:

当我只映射一个表时,我可以使用 JPA 获取值

现在当我去映射相关表时,我得到了错误

  Only one may be defined as writable, all others must be specified read-only.
  Mapping: org.eclipse.persistence.mappings.OneToOneMapping[userId1]

我正在使用 [EclipseLink-0] (Eclipse Persistence Services - 2.0.1.v20100213-r6600)

在其中一个子表中我有这个代码

@OneToMany(cascade = CascadeType.ALL, mappedBy = "albumId")
private Collection<Images> imagesCollection;
@JoinColumn(name = "user_id", referencedColumnName = "User_ID")
@ManyToOne(optional = false)
private Roleuser userId;
@JoinColumn(name = "album_image", referencedColumnName = "image_id")
@ManyToOne
private Images albumImage;
@JoinColumn(name = "album_image", referencedColumnName = "image_id")
@ManyToOne
private Images albumImage1;
@JoinColumn(name = "user_id", referencedColumnName = "User_ID")
@ManyToOne(optional = false)
private Roleuser userId1;

我必须在此代码中进行哪些更改才能使字段为只读?

或者有没有更好的解决方法来不将这些字段设为只读?

【问题讨论】:

    标签: java orm jpa entity-relationship eclipselink


    【解决方案1】:

    您有两个使用相同外键字段的多对一关系。这没有意义,它们会是同一个对象吗?

    @JoinColumn(name = "album_image", referencedColumnName = "image_id")
    @ManyToOne
    private Images albumImage;
    @JoinColumn(name = "album_image", referencedColumnName = "image_id")
    @ManyToOne
    private Images albumImage1;
    

    您应该有两个不同的外键字段,即albumImage 和albumImage1。

    【讨论】:

    • 使用 openJPA 没有任何问题,或者我认为...可能稍后会出现问题...好吧,我还有一个问题...stackoverflow.com/questions/3567438/…
    • 我对 JPA 不太了解,但我使用 netbeans 生成的实体类与 openJPA 相同...
    • netbeans 生成了类...那么为什么 netbeans 会生成单个关系的两个引用...我应该为 netbeans 提交错误...
    • 要将其中一个 JoinColumns 设为只读,请在注释中设置 insertable/updateable=false。但是你的映射仍然没有任何意义......
    • 另外,请为这个问题记录一个错误,我们可能应该只记录一个警告而不是抛出一个错误。
    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多