tags:

views:

62

answers:

0

Hi

I have set of hibernate mapping classes like User/Role/Menu etc I also have other set of classes like Table/Column/Evv etc. These two sets are not directly related to each other however we have the UI framework which identify which Menu is associated with Table and load columns and Evv for that.

All these objects are cached in read-only mode. I also have "mutable=false" set on these files

Now my issue is, when I try to insert "User" I dont know for what reason its trying insert null values in EVV tables, Can some one please explain me whats going wrong. I have been spending hours with this issue.

Here is the exception I get



Hibernate: select metuser0_.id as id135_2_, metuser0_.ISACTIVE as ISACTIVE135_2_, metuser0_.version as version135_2_, metuser0_.ADDRESS1 as ADDRESS4_135_2_, metuser0_.ADDRESS2 as ADDRESS5_135_2_, metuser0_.CELLPHONE as CELLPHONE135_2_, metuser0_.CITY as CITY135_2_, metuser0_.COMPANY as COMPANY135_2_, metuser0_.COUNTRY as COUNTRY135_2_, metuser0_.EMAIL as EMAIL135_2_, metuser0_.FAX as FAX135_2_, metuser0_.FIRST_NAME as FIRST12_135_2_, metuser0_.HOMEPHONE as HOMEPHONE135_2_, metuser0_.LAST_MODIFIED_DATE as LAST14_135_2_, metuser0_.LAST_NAME as LAST15_135_2_, metuser0_.PASSWORD as PASSWORD135_2_, metuser0_.STATE as STATE135_2_, metuser0_.USER_ID as USER18_135_2_, metuser0_.WORKPHONE as WORKPHONE135_2_, metuser0_.ZIP as ZIP135_2_, metuser0_1_.MET_ROLE as MET1_136_2_, metrole1_.id as id134_0_, metrole1_.ISACTIVE as ISACTIVE134_0_, metrole1_.version as version134_0_, metrole1_.DESCRIPTION as DESCRIPT4_134_0_, metrole1_.ROLE_NAME as ROLE5_134_0_, menuaction2_.role_id as role6_4_, menuaction2_.id as id4_, menuaction2_.id as id138_1_, menuaction2_.ISACTIVE as ISACTIVE138_1_, menuaction2_.version as version138_1_, menuaction2_.action_id as action4_138_1_, menuaction2_.menu_id as menu5_138_1_, menuaction2_.role_id as role6_138_1_ from SGSILMTACC_20100210.MET_USER metuser0_ left outer join SGSILMTACC_20100210.MET_USER_ROLE_LINK metuser0_1_ on metuser0_.id=metuser0_1_.MET_USER left outer join SGSILMTACC_20100210.MET_ROLE metrole1_ on metuser0_1_.MET_ROLE=metrole1_.id left outer join SGSILMTACC_20100210.MET_ROLE_MENU_ACTION menuaction2_ on metrole1_.id=menuaction2_.role_id where metuser0_.id=?
Hibernate: select SGSILMTACC_20100210.hibernate_sequence.nextval from dual
Hibernate: insert into SGSILMTACC_20100210.MET_USER (ISACTIVE, version, ADDRESS1, ADDRESS2, CELLPHONE, CITY, COMPANY, COUNTRY, EMAIL, FAX, FIRST_NAME, HOMEPHONE, LAST_MODIFIED_DATE, LAST_NAME, PASSWORD, STATE, USER_ID, WORKPHONE, ZIP, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into SGSILMTACC_20100210.MET_USER_ROLE_LINK (MET_ROLE, MET_USER) values (?, ?)
Hibernate: update SGSILMTACC_20100210.MET_EVV_VALUE set MET_EVV=null where MET_EVV=?
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:169)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    at com.mi.flex.gateway.MIMetadataService.saveObject(MIMetadataService.java:786)
    at com.mi.flex.gateway.MIMetadataService.saveUser(MIMetadataService.java:867)
    at com.mi.flex.gateway.GatewayServiceSJ.saveUser(GatewayServiceSJ.java:1152)
    at com.mi.flex.gateway.GatewayService.saveUser(GatewayService.java:447)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:406)
    at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
    at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1417)
    at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:878)
    at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
    at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
    at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:49)
    at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
    at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)
    at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:274)
    at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.BatchUpdateException: ORA-01407: cannot update ("SGSILMTACC_20100210"."MET_EVV_VALUE"."MET_EVV") to NULL

    at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
    at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
    ... 39 more
java.lang.Exception: Could not save MetUser.

REASON : java.sql.BatchUpdateException: ORA-01407: cannot update ("SGSILMTACC_20100210"."MET_EVV_VALUE"."MET_EVV") to NULL

    at com.mi.flex.gateway.MIMetadataService.saveObject(MIMetadataService.java:791)
    at com.mi.flex.gateway.MIMetadataService.saveUser(MIMetadataService.java:867)
    at com.mi.flex.gateway.GatewayServiceSJ.saveUser(GatewayServiceSJ.java:1152)
    at com.mi.flex.gateway.GatewayService.saveUser(GatewayService.java:447)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:406)
    at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
    at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1417)
    at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:878)
    at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
    at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
    at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:49)
    at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
    at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)
    at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:274)
    at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

The only related object with MET_USER is "Role" and I am loading that via Link table

@ManyToOne (cascade={CascadeType.ALL})
@JoinTable(
        name="MET_USER_ROLE_LINK",
        joinColumns=@JoinColumn(name="MET_USER",unique=true),
        inverseJoinColumns=@JoinColumn(name="MET_ROLE")
    )   
@BatchSize(size=100)
private MetRole role;

these objects has no relationship with "Evv" classes. MetEVV

@Entity
@Table(name = "MET_EVV")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region="com.mi.hibernate.hbm.metadata.MetEVV")
@org.hibernate.annotations.Entity(mutable=false)
public class MetEVV implements java.io.Serializable {

    private static final long serialVersionUID = -4041794245877212048L;
    private long id;
    private String evvName;
    private EvvType type;
    private String query;
    private List<MetEVVValue> metEVVValues = new ArrayList<MetEVVValue>(0);
    private String queryType;

    public MetEVV() {
    }

    public MetEVV(long id, String evvName, EvvType type) {
        this.id = id;
        this.evvName = evvName;
        this.type = type;
    }

    public MetEVV(long id, String evvName, EvvType type, String hql,
            List<MetEVVValue> metEVVValues) {
        this.id = id;
        this.evvName = evvName;
        this.type = type;
        this.query = hql;
        this.metEVVValues = metEVVValues;
    }

    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
    public long getId() {
        return this.id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @Column(name = "EVV_NAME", nullable = false, length = 20)
    public String getEvvName() {
        return this.evvName;
    }

    public void setEvvName(String evvName) {
        this.evvName = evvName;
    }

    @Column(name = "TYPE", nullable = false, length = 10)
    public EvvType getType() {
        return this.type;
    }

    public void setType(EvvType type) {
        this.type = type;
    }

    @Column(name = "QUERY", length = 500)
    public String getQuery() {
        return this.query;
    }

    public void setQuery(String query) {
        this.query = query;
    }

    @Column(name = "QUERY_TYPE", length = 500)
    public String getQueryType() {
        return this.queryType;
    }

    public void setQueryType(String queryType) {
        this.queryType = queryType;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)   
    @JoinColumn(name="MET_EVV")
    @BatchSize(size=100)
    public List<MetEVVValue> getEVVValues() {
        return this.metEVVValues;
    }

    public void setEVVValues(List<MetEVVValue> metEVVValues) {
        this.metEVVValues = metEVVValues;
    }
}

MetEvvValue

@Entity
@Table(name = "MET_EVV_VALUE")
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region="com.mi.hibernate.hbm.metadata.MetEVVValue")
@org.hibernate.annotations.Entity(mutable=false)
public class MetEVVValue implements java.io.Serializable {

    private static final long serialVersionUID = 6886248491955561677L;
    private long id;
    private String key;
    private String value;

    public MetEVVValue() {
    }

    public MetEVVValue(long id, String key, String value) {
        this.id = id;
        this.key = key;
        this.value = value;
    }

    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
    public long getId() {
        return this.id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @Column(name = "KEY", nullable = false, length = 20)
    public String getKey() {
        return this.key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    @Column(name = "VALUE", nullable = false, length = 20)
    public String getValue() {
        return this.value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}

Any idea why am i get this strange issue ?