我有點新的JPA所以裸陪我,但這裏是我迄今爲止.. 我有兩個表.. 資產表如何使OpenJPA的2.2.0不能堅持外鍵
ASSET_ID SYSIBM INTEGER 4 0無
USER_ID SYSIBM INTEGER 4 0無
ASSET_TYPE_ID SYSIBM SMALLINT 2 0無
ACCESSIBILITY_ID SYSIBM SMALLINT 2個0是
DOWNLOAD_TYPE_ID SYSIBM SMALLINT 2 0無
ASSET_STATUS_ID SYSIBM SMALLINT 2 0無
ASSET_MARKETING_ID SYSIBM SMALLINT 2 0是
ASSET_PI_SPI_ID SYSIBM SMALLINT 2個0是
和無障礙環境表
ACCESSIBILITY_ID SYSIBM SMALLINT 2 0無
ACCESSIBILITY_DESC SYSIBM VARCHAR 50 0無
我有兩個豆,
Asset Bean
@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:遇到非託管對象「[email protected]」處於生命週期狀態,非託管,而級聯持久性通過字段「com.ibm.tap .ejb.dao.entity.Asset.accessibilityId「在刷新期間。但是,該字段不允許級聯持續。您無法刷新與非託管對象持久關聯的非託管對象或圖形。建議的操作:a)將此字段的級聯屬性設置爲CascadeType.PERSIST或CascadeType.ALL(JPA註釋)或「persist」或「all」(JPA orm.xml),b)全局啓用cascade-persist,c)手動在沖洗之前堅持相關的字段值。 d)如果引用屬於另一個上下文,則允許通過設置StoreContext.setAllowReferenceToSiblingContext()來引用它。 FailedObject:[email protected]
我試圖改變資產類
@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」類型的對象;另一個不能堅持。 FailedObject:[email protected]
對我來說,我試圖堅持我已經擁有的表。我究竟做錯了什麼?