2つのテーブルがあります。アセットテーブル
ASSET_ID SYSIBM INTEGER40いいえ
USER_IDSYSIBMINTEGER40いいえ
ASSET_TYPE_IDSYSIBMSMALLINT20いいえ
ACCESSIBILITY_IDSYSIBMSMALLINT20はい
DOWNLOAD_TYPE_IDSYSIBMSMALLINT20いいえ
ASSET_STATUS_IDSYSIBMSMALLINT20いいえ
ASSET_MARKETING_IDSYSIBMSMALLINT
20
およびアクセス可能性テーブル
ACCESSIBILITY_ID SYSIBM SMALLINT20いいえ
ACCESSIBILITY_DESCSYSIBMVARCHAR500いいえ
私は2つの豆を持っています、
アセットビーン
@Column(name="ASSET_ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int assetId;
@Column(name="DATE_CREATED")
private Timestamp dateCreated;
@Column(name="LAST_UPDATED")
private Timestamp lastUpdated;
@Column(name="DATE_PUBLISHED")
private Timestamp datePublished;
@Column(name="ASSET_SURVEY")
private Short assetSurvey;
@Column(name="ASSET_HELP")
private Short assetHelp;
@Column(name="ACCEPTED_TERMS")
private Short acceptedTerms;
@Column(name="ASSET_DESC")
@Lob
private String assetDesc;
@Column(name="ASSET_ALIAS")
private String assetAlias;
@Column(name="ASSET_TITLE")
private String assetTitle;
@Column(name="ASSET_SUMMARY")
private String assetSummary;
@Column(name="ASSET_URL")
private String assetUrl;
@Column(name="ASSET_ORIGINALITY")
private Short assetOriginality;
@Column(name="ASSET_INVENTION")
private Short invationDisclosure;
@Column(name="ASSET_PRIVACY")
private String privacyCompliance;
@ManyToOne
@JoinColumn(name="ASSET_PI_SPI_ID")
private AssetPiSpi assetPiSpiId;
@ManyToOne
@JoinColumn(name="ASSET_MARKETING_ID")
@ForeignKey
private AssetMarketing assetMarketingId;
@ManyToOne(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY)
@JoinColumn(name="ACCESSIBILITY_ID")
@ForeignKey
private Accessibility accessibilityId;
とアクセシビリティ
@Column(name="ACCESSIBILITY_ID")
private short accessibilityId;
@Column(name="ACCESSIBILITY_DESC")
private String accessibilityDesc;
@OneToMany(mappedBy="accessibilityId",cascade=CascadeType.REMOVE,fetch=FetchType.LAZY)
private Set<Asset> assetCollection;
EntitiManager.flush()がManagerBeanで呼び出されたとき
em.persist(asset);
em.flush();
私は得ています
javax.ejb.EJBException:ネストされた例外を参照してください。ネストされた例外は次のとおりです。org.apache.openjpa.persistence.InvalidStateException:フィールド「com.ibm.tapフラッシュ中の.ejb.dao.entity.Asset.accessibilityId"。ただし、このフィールドではカスケードの永続化は許可されません。管理されていないオブジェクトまたは管理されていないオブジェクトに永続的に関連付けられているグラフをフラッシュすることはできません。推奨されるアクション:a)このフィールドのカスケード属性をCascadeType.PERSISTまたはCascadeType.ALL(JPAアノテーション)または「persist」または「all」(JPA orm.xml)に設定します。b)カスケード永続化をグローバルに有効にします。c)手動でフラッシュする前に、関連するフィールド値を保持します。d)参照が別のコンテキストに属している場合、StoreContext.setAllowReferenceToSiblingContext()を設定して、それへの参照を許可します。FailedObject:com.ibm.tap.ejb.dao.entity.Accessibility@169e3455
Assetクラスをに変更してみました
@ManyToOne(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY)
@JoinColumn(name="ACCESSIBILITY_ID")
@ForeignKey
private Accessibility accessibilityId;
これを行うと、javax.ejb.EJBExceptionが発生します。ネストされた例外を参照してください。ネストされた例外は次のとおりです。org.apache.openjpa.persistence.EntityExistsException:OID「1」のタイプ「com.ibm.tap.ejb.dao.entity.Accessibility」のオブジェクトがこのコンテキストにすでに存在します。もう1つは永続化できません。FailedObject:com.ibm.tap.ejb.dao.entity.Accessibility@166c27b9
これは、私がすでに持っているテーブルを永続化しようとしていることを私には理解しています。私は何が間違っているのですか?