These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Problem insertion into tables with composite keys
PostPosted: Tue Apr 06, 2010 12:54 pm 
Newbie

Joined: Tue Mar 23, 2010 5:32 pm
Posts: 8
I have a problem when I am trying to insert data into multiple tables at a time. I have a parent table AccountUser and a child table UserAlternateEmail. Here are my entities.

Code:
@Embeddable
public class UserAlternateEmailPK implements Serializable
{
   private static final long serialVersionUID = 1L;

   private Long userId = new Long(73);
   
   private String email;
...
}

@Entity
@Table(name = "USER_ALTERNATE_EMAIL")
public class UserAlternateEmail implements Serializable
{
   private static final long serialVersionUID = 1L;

   @EmbeddedId
   @AttributeOverrides( {
         @AttributeOverride(name = "userId", column = @Column(name = "USER_ID", nullable = false, precision = 38, scale = 0)),
         @AttributeOverride(name = "email", column = @Column(name = "EMAIL", nullable = false, length = 256)) })
   private UserAlternateEmailPK id = new UserAlternateEmailPK();
   
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "USER_ID", nullable = false, insertable = false, updatable = false)
   private AccountUser accountUser;
   
   @Column(name = "CREATED_BY", nullable = false)
   private Long createdBy;
   
   @Column(name = "CREATED_DATE", nullable = false)
   private Timestamp createdDate = new Timestamp(Calendar.getInstance().getTimeInMillis());

.....
}


@Entity
@NamedQueries( {
      @NamedQuery(name = "AccountUser.findByUserId", query = "SELECT A FROM AccountUser A WHERE A.userId = ?"),
      @NamedQuery(name = "AccountUser.findByPrimaryEmailId", query = "SELECT A FROM AccountUser A WHERE A.primaryEmail = ?"),
      @NamedQuery(name = "AccountUser.findByUsername", query = "SELECT A FROM AccountUser A WHERE A.userName = ?"),
      @NamedQuery(name = "AccountUser.findByUsernameAndPrimaryEmailId", query = "SELECT A FROM AccountUser A WHERE A.userName = ? and A.primaryEmail = ?") })
@Table(name = "ACCOUNT_USER")
public class AccountUser implements Serializable {
   private static final long serialVersionUID = 1L;

   @Id
   @SequenceGenerator(name = "USER_ID_SEQ", sequenceName = "INTERNAL_ID_SEQ")
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_ID_SEQ")
   @Column(name = "USER_ID")
   private Long userId;

   // FK to ACCOUNT
   @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
   @JoinColumn(name = "ACCOUNT_ID", nullable = false)
   private Account account;

   @Column(name = "STATUS", nullable = false)
   private String status;

   // FK to USER_PREVILIGE
   @Column(name = "PRIVILEGE", nullable = false)
   private String privilege;

   @Column(name = "USERNAME", nullable = false, unique = true)
   private String userName;

   @Column(name = "PASSWORD", nullable = false)
   private String password;

   @Column(name = "DISPLAY_NAME", nullable = false)
   private String displayName;

   @Column(name = "SORT_NAME", nullable = true)
   private String sortName;

   @Column(name = "FIRST_GIVEN_NAME", nullable = true)
   private String firstGivenName;

   @Column(name = "SECOND_GIVEN_NAME", nullable = true)
   private String secondGivenName;

   @Column(name = "FAMILY_NAME", nullable = true)
   private String familyName;

   @Column(name = "SUFFIX", nullable = true)
   private String suffix;

   @Column(name = "MONIKER", nullable = true)
   private String moniker;

   @Column(name = "PRIMARY_EMAIL", nullable = false, unique = true)
   private String primaryEmail;

   @Column(name = "ADDRESS", nullable = true)
   private String address;

   @Column(name = "PHONE", nullable = true)
   private String phone;

   // FK to USER_LANGUAGE
   @Column(name = "PRIMARY_LANGUAGE", nullable = true)
   private String primaryLanguage;

   @Column(name = "ADULT_FLAG", nullable = true)
   private String adultFlag;

   @Column(name = "BLOCK_UNRATED", nullable = true)
   private String blockUnrated;

   @Column(name = "USE_AGE_AS_DEFAULT", nullable = true)
   private String useAgeAsDefault;

   @Column(name = "BIRTH_DATE", nullable = false)
   private Date birthDate;

   @Column(name = "HIDE_RESTRICTED_CONTENT", nullable = true)
   private String hideRestrictedContent;

   @Column(name = "NO_PURCHASE_RESTRICTED_CONTENT", nullable = true)
   private String noPurchaseRestrictedContent;

   @Column(name = "RATING_PIN", nullable = false)
   private Long ratingPin;

   @Column(name = "CREATED_DATE", nullable = false)
   private Timestamp createdDate = new Timestamp(Calendar.getInstance().getTimeInMillis());

   // FK to NODE
   @Column(name = "CREATED_BY", nullable = false)
   private Long createdByNode;

   @Column(name = "UPDATED_DATE", nullable = true)
   private Timestamp updatedDate;

   // FK to NODE
   @Column(name = "UPDATED_BY", nullable = true)
   private Long updatedByNode;

   @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "nodeUserId")
   private List<NodeUserMap> nodeUserMap = new ArrayList<NodeUserMap>(0);

   @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "grantingAccountUser")
   private List<RightsOptIn> rightsOptIns = new ArrayList<RightsOptIn>(0);

   @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "bindingAccountUser")
   private List<LlaspBinding> llaspBindings = new ArrayList<LlaspBinding>(0);

   @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "accountUser", targetEntity = UserAlternateEmail.class)
   private List<UserAlternateEmail> userAlternateEmails = new ArrayList<UserAlternateEmail>(
         0);

   @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "accountUser", targetEntity = UserAllowedRating.class)
   private List<UserAllowedRating> userAllowedRatings = new ArrayList<UserAllowedRating>(
         0);

   @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "accountUser", targetEntity = UserLanguage.class)
   private List<UserLanguage> userLanguages = new ArrayList<UserLanguage>(0);




when I try to persist Account User it is also trying to persist the UserAlternateEmail as I am looking for, but it is throwing the following exception.

Code:
Caused by: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; SQL [insert into USER_ALTERNATE_EMAIL (CREATED_BY, CREATED_DATE, EMAIL) values (?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
   at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:637)
   at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:793)
   at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:664)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
   at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:412)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
   at $Proxy34.createAccount(Unknown Source)
   at biz.neustar.dece.business.api.impl.AccountCreateApi.performDatabaseOperation(AccountCreateApi.java:282)
   at biz.neustar.dece.business.api.impl.ApiBase.process(ApiBase.java:626)
   at biz.neustar.dece.business.impl.AccountBusinessServiceImpl.createAccount(AccountBusinessServiceImpl.java:94)
   at biz.neustar.dece.service.AccountServiceImpl.createAccount(AccountServiceImpl.java:55)
   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 org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
   at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
   ... 30 more
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
   at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
   at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
   at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
   at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
   at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
   at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
   at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2242)
   at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2678)
   at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
   at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
   at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
   at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
   at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
   at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
   at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
   at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656)
   ... 47 more
Caused by: java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("DECE"."USER_ALTERNATE_EMAIL"."USER_ID")

   at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:629)
   at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9409)
   at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:211)
   at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
   at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
   at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
   ... 62 more


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.