2 Replies Latest reply: Jul 26, 2010 9:35 AM by 843833 RSS

    JPA entities -- org.hibernate.TypeMismatchException

    843833
      Environment:
      JDK 1.6, JEE5
      Hibernate 3
      DB:Informix

      Used reverse engineering to create my persistence entities from db schema [*NB:This is a schema in work i cannot change*]

      Getting exception when selecting list of basic_auth_accounts org.hibernate.TypeMismatchException: Provided id of the wrong type for class ebusiness.weblogic.model.UserAccounts. Expected: class ebusiness.weblogic.model.UserAccountsId, got class ebusiness.weblogic.model.BasicAuthAccountsId

      Both basic_auth_accounts and user_accounts have composite primary keys and one-to-one relationships.
      Main Code for classes are:
      /**
       * BasicAuthAccounts generated by hbm2java
       */
      @Entity
      @Table(name = "basic_auth_accounts", schema = "ebusdevt", catalog = "ebusiness_dev", uniqueConstraints = @UniqueConstraint(columnNames = {
              "realm_type_id", "realm_qualifier", "account_name" }))
      public class BasicAuthAccounts implements java.io.Serializable {
      
          private BasicAuthAccountsId id;
          private UserAccounts userAccounts;
          private String accountName;
          private String hashedPassword;
          private boolean passwdChangeReqd;
          private String hashMethodId;
          private int failedAttemptNo;
          private Date failedAttemptDate;
          private Date lastAccess;
      
          public BasicAuthAccounts() {
          }
      
          public BasicAuthAccounts(UserAccounts userAccounts, String accountName, String hashedPassword,
                  boolean passwdChangeReqd, String hashMethodId, int failedAttemptNo) {
              this.userAccounts = userAccounts;
              this.accountName = accountName;
              this.hashedPassword = hashedPassword;
              this.passwdChangeReqd = passwdChangeReqd;
              this.hashMethodId = hashMethodId;
              this.failedAttemptNo = failedAttemptNo;
          }
      
          public BasicAuthAccounts(UserAccounts userAccounts, String accountName, String hashedPassword,
                  boolean passwdChangeReqd, String hashMethodId, int failedAttemptNo,
                  Date failedAttemptDate, Date lastAccess) {
              this.userAccounts = userAccounts;
              this.accountName = accountName;
              this.hashedPassword = hashedPassword;
              this.passwdChangeReqd = passwdChangeReqd;
              this.hashMethodId = hashMethodId;
              this.failedAttemptNo = failedAttemptNo;
              this.failedAttemptDate = failedAttemptDate;
              this.lastAccess = lastAccess;
          }
      
          @EmbeddedId
          @AttributeOverrides( {
                  @AttributeOverride(name = "realmTypeId", column = @Column(name = "realm_type_id", nullable = false, length = 32)),
                  @AttributeOverride(name = "realmQualifier", column = @Column(name = "realm_qualifier", nullable = false, length = 32)),
                  @AttributeOverride(name = "accountId", column = @Column(name = "account_id", nullable = false)) })
          public BasicAuthAccountsId getId() {
              return this.id;
          }
      
          public void setId(BasicAuthAccountsId id) {
              this.id = id;
          }
      
          @OneToOne(fetch = FetchType.LAZY)
          @PrimaryKeyJoinColumn
          @NotNull
          public UserAccounts getUserAccounts() {
              return this.userAccounts;
          }
      
          public void setUserAccounts(UserAccounts userAccounts) {
              this.userAccounts = userAccounts;
          }
      
      /**
       * BasicAuthAccountsId generated by hbm2java
       */
      @Embeddable
      public class BasicAuthAccountsId implements java.io.Serializable {
      
          private String realmTypeId;
          private String realmQualifier;
          private long accountId;
      
          public BasicAuthAccountsId() {
          }
      
          public BasicAuthAccountsId(String realmTypeId, String realmQualifier, long accountId) {
              this.realmTypeId = realmTypeId;
              this.realmQualifier = realmQualifier;
              this.accountId = accountId;
          }
      
      /**
       * UserAccounts generated by hbm2java
       */
      @Entity
      @Table(name = "user_accounts", schema = "ebusdevt", catalog = "ebusiness_dev")
      public class UserAccounts implements java.io.Serializable {
      
          private UserAccountsId id;
          private Realms realms;
          private UserDetails userDetails;
          private Integer accessLevel;
          private String status;
          private boolean isEdge;
          private String role;
          private boolean chargesAccess;
          private Date createdTimestamp;
          private Date lastStatusChangeTimestamp;
          private BasicAuthAccounts basicAuthAccounts;
          private Set<Sessions> sessionses = new HashSet<Sessions>(0);
          private Set<AccountGroups> accountGroupses = new HashSet<AccountGroups>(0);
          private Set<UserPrivileges> userPrivilegeses = new HashSet<UserPrivileges>(0);
      
          public UserAccounts() {
          }
      
          public UserAccounts(UserAccountsId id, Realms realms, UserDetails userDetails, String status,
                  boolean isEdge, boolean chargesAccess) {
              this.id = id;
              this.realms = realms;
              this.userDetails = userDetails;
              this.status = status;
              this.isEdge = isEdge;
              this.chargesAccess = chargesAccess;
          }
      
      
          @EmbeddedId
          @AttributeOverrides( {
                  @AttributeOverride(name = "realmTypeId", column = @Column(name = "realm_type_id", nullable = false, length = 32)),
                  @AttributeOverride(name = "realmQualifier", column = @Column(name = "realm_qualifier", nullable = false, length = 32)),
                  @AttributeOverride(name = "accountId", column = @Column(name = "account_id", nullable = false)) })
          @NotNull
          public UserAccountsId getId() {
              return this.id;
          }
      
          public void setId(UserAccountsId id) {
              this.id = id;
          }
      
      
      
          @OneToOne(fetch = FetchType.LAZY, mappedBy = "userAccounts")
          public BasicAuthAccounts getBasicAuthAccounts() {
              return this.basicAuthAccounts;
          }
      
          public void setBasicAuthAccounts(BasicAuthAccounts basicAuthAccounts) {
              this.basicAuthAccounts = basicAuthAccounts;
          }
      
      /**
       * UserAccountsId generated by hbm2java
       */
      @Embeddable
      public class UserAccountsId implements java.io.Serializable {
      
          private String realmTypeId;
          private String realmQualifier;
          private long accountId;
      
          public UserAccountsId() {
          }
      
          public UserAccountsId(String realmTypeId, String realmQualifier, long accountId) {
              this.realmTypeId = realmTypeId;
              this.realmQualifier = realmQualifier;
              this.accountId = accountId;
          }
      
          @Column(name = "realm_type_id", nullable = false, length = 32)
          @NotNull
          @Length(max = 32)
          public String getRealmTypeId() {
              return this.realmTypeId;
          }
      
          public void setRealmTypeId(String realmTypeId) {
              this.realmTypeId = realmTypeId;
          }
      
          @Column(name = "realm_qualifier", nullable = false, length = 32)
          @NotNull
          @Length(max = 32)
          public String getRealmQualifier() {
              return this.realmQualifier;
          }
      
          public void setRealmQualifier(String realmQualifier) {
              this.realmQualifier = realmQualifier;
          }
      
          @Column(name = "account_id", nullable = false)
          public long getAccountId() {
              return this.accountId;
          }
      
          public void setAccountId(long accountId) {
              this.accountId = accountId;
          }
      Any clues what to do here? This is pretty important that i get this to work. Cannot find any substantial solution on the net, some say to create an ID class which hibernate has done, and some say not to have a one-to-one relationship.

      Please help me!!