Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    JPA, orphanRemoval, Problem

    Hi,

    I have a problem with JPA and (cascade={CascadeType.ALL}, orphan Removal=real). I have a project that can have some comments and some configurations. The configurations can has some comments, too.
    - If I add a comment to the project which has a configuration, then I got the followed error.
    - If I add a comment to the project that has no configurations, then it works well.
    - If I add a comment to a configuration, that works also well.
    - If I remove (cascade={CascadeType.ALL}, orphanRemoval=true) from the private List ; on the Configuration.java Entity, then all scenarios works well without errors. But, I have a Comment corps in the DataBase, if I delete some configurations.

    I can't see the problem, how it does not work with cascade.

    ErrorMessage:
    Code:
    === 2012-06-28 20:12:35,843 [l0-6] WARN  DataSource - [builtinApplication.project_DataSource_update] Couldn't set property 'comment' for datasource 'project_DataSource'. Actual error: javax.persistence.PersistenceException: org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: com.detection.smiths.eapcfg.server.persistence.Cfg.comment
    === 2012-06-28 20:12:35,851 [l0-6] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8
    === 2012-06-28 20:12:35,852 [l0-6] DEBUG JPADataSource - Committing transaction for 1 queued operation(s).
    === 2012-06-28 20:12:35,852 [l0-6] ERROR JPADataSource - Failed to commit transaction. Rolling back.
    javax.persistence.RollbackException: Transaction marked as rollbackOnly
    Developer Console:
    Type: DSRequest
    DS or appID: project_DataSource
    Operation: Update
    Component: isc_DynamicForm
    Status: -10

    DSRequest
    Code:
    {
        "dataSource":"project_DataSource", 
        "operationType":"update", 
        "componentId":"isc_DynamicForm_1", 
        "data":{
            "cfg":[
                {
                    "comment":[
                    ], 
                    "todo":"CFG"
                }
            ], 
            "comment":[
                {
                    "comment":"12121212"
                }
            ], 
            "projectName":"NEW PROJECT",
            "status":"OPEN"
        }, 
        "callback":{
            "target":[DynamicForm ID:isc_DynamicForm_1], 
            "methodName":"saveEditorReply"
        }, 
        "showPrompt":true, 
        "prompt":"Saving form...", 
        "oldValues":{
            "cfg":[
                {
                    "comment":[
                    ], 
                    "todo":"CFG"
                }
            ], 
            "comment":[
                {
                    "comment":"12121212"
                }
            ], 
            "projectName":"NEW PROJECT", 
            "status":"OPEN"
        }, 
        "clientContext":{
        }, 
        "requestId":"project_DataSource$6277"
    }
    Response Raw
    Code:
    [
        {
            data:{
                cfg:[
                    {
                        comment:[
                        ], 
                        todo:"CFG"
                    }
                ], 
                comment:[
                ], 
                projectName:"NEW PROJECT", 
                status:"OPEN"
            }, 
            invalidateCache:false, 
            isDSResponse:true, 
            operationType:"update", 
            queueStatus:-1, 
            status:-10
        }
    ]
    Code:
    @Entity
    @Table (name="Cfg")
    public class Cfg  implements Serializable{
        @Id
        @Column 
        @GeneratedValue (strategy = GenerationType.IDENTITY)
        private Long cfgId;
    
        @Column  (nullable = false)
        private String todo; 
       
        @OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true)  
        @JoinColumn(name="cfgCommentId", referencedColumnName="cfgId")   
        private List<Comment> comment;
    ...
    }
    Code:
    @Entity
    @Table (name="Project")
    public class Project  implements Serializable{
        @Id
        @Column 
        @GeneratedValue (strategy = GenerationType.IDENTITY)
        private Long nodeId;
    
        @Column  (nullable = false)
        private String projectName; 
       
        @OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true)  
        @JoinColumn(name="projectCommentId", referencedColumnName="nodeId")   
        private List<Comment> comment;  
    ...
    }
    Code:
    @Entity
    @Table (name="Comment")
    public class Comment  implements Serializable{
    
        @Id
        @Column 
        @GeneratedValue (strategy = GenerationType.IDENTITY)
        private Long commentId;
    
        @Column  
        private String comment="";
    
        @Column  
        private Boolean ok;
        
        public Comment (){
        }
    ...
    }
    Code:
    <DataSource
        ID="project_DataSource"
        serverConstructor="com.isomorphic.jpa.JPADataSource"
        beanClassName="com.detection.smiths.eapcfg.server.persistence.Project"
        >
        <fields>
            ...
            <field name="comment"   type="comment_DataSource" foreignKey="comment_DataSource.commentId" multiple="true" title="Kommentar" required="false"/>
            <field name="cfg"   type="cfg_DataSource" foreignKey="cfg_DataSource.cfgId" multiple="true" title="Cfg" required="false"/>
                  
                    
        </fields>
    Code:
    <DataSource
        ID="cfg_DataSource"
        serverConstructor="com.isomorphic.jpa.JPADataSource"
        beanClassName="com.detection.smiths.eapcfg.server.persistence.Cfg"
        >
        <fields>
    ...
            <field name="comment"   type="comment_DataSource" foreignKey="comment_DataSource.commentId" multiple="true" title="Kommentar" required="false"/>
         	
        </fields>
    </DataSource>
Working...
X