You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Sandhya (JIRA)" <ji...@apache.org> on 2008/11/26 20:58:44 UTC
[jira] Commented: (OPENJPA-792) An entity persist may fail when
@MappedSupercalss is specified.
[ https://issues.apache.org/jira/browse/OPENJPA-792?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12651127#action_12651127 ]
Sandhya commented on OPENJPA-792:
---------------------------------
Hi all,
I am working on this issue and I will update patch soon. (I will try to upload this today if not I will upload the patch the after the thanksgiving)
Thanks
Sandhya
> An entity persist may fail when @MappedSupercalss is specified.
> ----------------------------------------------------------------
>
> Key: OPENJPA-792
> URL: https://issues.apache.org/jira/browse/OPENJPA-792
> Project: OpenJPA
> Issue Type: Bug
> Components: jpa
> Affects Versions: 2.0.0
> Reporter: Sandhya
> Fix For: 2.0.0
>
>
> When @MappedSuperClass annotation is specified and if we try to persist the same key of the subclasses which are entities of the Mappedsuperclass , Persist fails which is not the expected behavior.
> import java.util.Date;
> import javax.persistence.Id;
> import javax.persistence.Column;
> @javax.persistence.MappedSuperclass
> public class Party {
>
>
> protected Long PartyId;
> protected String Status;
> protected String ArchiveStatus;
> protected Date CreateDate;
>
> @Id
> public Long getPartyId() {
> return this.PartyId;
> }
>
> public void setPartyId(Long id){
> this.PartyId = id;
> }
>
> public void setArchiveStatus(String s){
> this.ArchiveStatus = s;
>
> }
>
> public void setStatus(String s) {
> this.Status = s;
> }
>
> @Column
> public String getStatus() {
> return this.Status;
> }
>
> @Column
> public String getArchiveStatus() {
> return this.ArchiveStatus;
> }
>
> public void setCreateDate(Date d) {
> this.CreateDate = d;
> }
>
> @Column
> public Date getCreateDate() {
> return this.CreateDate;
> }
> }
> import java.util.List;
> import javax.persistence.DiscriminatorValue;
> import javax.persistence.Entity;
> import javax.persistence.Inheritance;
> import javax.persistence.OneToMany;
> import javax.persistence.Table;
> import javax.persistence.FetchType;
> import javax.persistence.CascadeType;
> import javax.persistence.InheritanceType;
> import org.apache.openjpa.persistence.jdbc.DiscriminatorStrategy;
> @Entity
> @Table(name = "Site")
> public class Site extends Party implements java.io.Serializable {
> private static final long serialVersionUID = 1L;
>
> private String SiteName;
> private String SiteDescription;
> /* private List<Store> stores;
>
> @OneToMany(mappedBy="site", cascade=CascadeType.ALL, fetch=FetchType.LAZY,
> targetEntity=Store.class)
> public List<Store> getStores() {
> return stores;
> }
>
> public void setStores(List<Store> storeList){
> this.stores = storeList;
> }*/
> public void setSiteName(String s) {
> this.SiteName = s;
> }
>
> public String getSiteName(){
> return this.SiteName;
> }
>
> public void setSiteDescription(String s) {
> this.SiteDescription = s;
> }
>
> public String getSiteDescription() {
> return this.SiteDescription;
> }
> }
> import javax.persistence.CascadeType;
> import javax.persistence.Entity;
> import javax.persistence.FetchType;
> import javax.persistence.Inheritance;
> import javax.persistence.InheritanceType;
> import javax.persistence.JoinColumn;
> import javax.persistence.ManyToOne;
> import javax.persistence.Table;
> @Entity
> @Table(name = "Store")
> public class Store extends Party implements java.io.Serializable {
> private static final long serialVersionUID = 1L;
> private String StoreName;
> private String StoreDescription;
>
> private Site site;
> private Long SiteId;
>
> @ManyToOne( fetch = FetchType.LAZY, cascade = CascadeType.ALL,
> targetEntity=Site.class)
> @JoinColumn(name = "Store.SiteId",
> referencedColumnName="site.PartyId", nullable = false, insertable = true,
> updatable = true)
>
> public Site getSite() {
> return site;
> }
>
> public void setSite(Site s) {
> this.site = s;
>
> }
>
> public void setStoreName(String s) {
> this.StoreName = s;
> }
>
> public String getStoreName() {
> return this.StoreName;
> }
>
> public void setStoreDescription(String s){
> this.StoreDescription = s;
> }
>
> public String getStoreDescription(){
> return this.StoreDescription;
> }
>
>
> public void setSiteId(Long id) {
> this.SiteId = id;
> }
>
> public Long getSiteId() {
> return this.SiteId;
> }
>
> }
> TestCase follows:
> import java.util.ArrayList;
> import java.util.Date;
> import java.util.List;
> import javax.persistence.EntityManager;
> import javax.persistence.EntityManagerFactory;
> import javax.persistence.Persistence;
> import lazy_fetch.bean.Site;
> import lazy_fetch.bean.Store;
> public class TestLazyFetch {
>
> public static EntityManagerFactory emf = null;
> public static Long pkey = new Long (1502);
>
> public static void main(String[] args) {
>
> emf = Persistence.createEntityManagerFactory("LazyFetch");
>
> createSite();
> System.out.println("Done creating Site");
> createStore();
> System.out.println("Done creating Store");
> // getStoreWithSite();
>
> }
>
> public static void getStoreWithSite() {
> EntityManager em = emf.createEntityManager();
> Store store = em.find(Store.class, pkey);
> System.out.println("store =" + store);
> // Site site = store.getSite();
> // System.out.println("site =" + site);
> }
>
> public static void createSite() {
> EntityManager em = emf.createEntityManager();
> em.getTransaction().begin();
>
> Site s = new Site();
> s.setPartyId(pkey);
> s.setSiteName("San Jose");
> s.setSiteDescription("San Jose site");
> s.setStatus("2");
> s.setArchiveStatus("2");
> s.setCreateDate(new Date());
>
> em.persist(s);
> em.getTransaction().commit();
> em.close();
> }
>
> public static void createStore() {
>
> EntityManager em = emf.createEntityManager();
> em.getTransaction().begin();
>
> Site site = em.find(Site.class, pkey);
>
> Store store = new Store();
> store.setPartyId(pkey);
> store.setStoreDescription("storeDescription");
> store.setStoreName("storeName");
> store.setStatus("1");
> store.setArchiveStatus("1");
> store.setCreateDate(new Date());
> store.setSiteId(site.getPartyId());
> store.setSite(site);
>
> // List<Store> stores = new ArrayList<Store>();
> // stores.add(store);
> // site.setStores(stores);
> em.persist(store);
> em.getTransaction().commit();
> }
>
> }
> 47 LazyFetch INFO [main] openjpa.Runtime - Starting OpenJPA 2.0.0-SNAPSHOT
> 125 LazyFetch INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DB2Dictionary".
> Exception in thread "main" <openjpa-2.0.0-SNAPSHOT-runknown nonfatal store error> org.apache.openjpa.persistence.EntityExistsException: An object of type "lazy_fetch.bean.Store" with oid "lazy_fetch.bean.Party-1502" already exists in this context; another cannot be persisted.
> FailedObject: lazy_fetch.bean.Store@9c609c6
> at org.apache.openjpa.kernel.BrokerImpl.checkForDuplicateId(BrokerImpl.java:4756)
> at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2445)
> at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2281)
> at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1021)
> at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:645)
> at lazy_fetch.tests.TestLazyFetch.createStore(TestLazyFetch.java:77)
> at lazy_fetch.tests.TestLazyFetch.main(TestLazyFetch.java:25)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.