2010-05-18 67 views
0

环境: JDK 1.6,JEE5 Hibernate的核心3.3.1.GA,Hibernate注解3.4.0.GA DB:Informix的JPA实体 - org.hibernate.TypeMismatchException

使用逆向工程,创造我的坚持从数据库架构的实体[注:这是在工作模式我不能改变]

获取例外选择basic_auth_accounts org.hibernate.TypeMismatchException的列表时:提供了错误的类型类ebusiness.weblogic.model的ID。 UserAccounts。预计:类ebusiness.weblogic.model.UserAccountsId,得到了类ebusiness.weblogic.model.BasicAuthAccountsId

两个basic_auth_accounts和user_accounts具有复合主键和一个一对一的关系。 任何线索在这里做什么?这是非常重要的,我得到这个工作。在网络上找不到任何实质性的解决方案,有人说创建一个hibernate已经完成的ID类,有人说没有一对一的关系。

请帮助我!

/** 
* 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; 
    } 

主要规范类:

回答

0

只是跟进查找/网上调查:

从我可以看到我有两个表basic_auth_accounts和使用相同的组合键user_accounts realmTypeId ,realmQualifier和accountId。 两个实体都具有这些列和一对一关系的可嵌入类。

我使用hibernate工具从数据库模式生成这些实体,我不能改变!

我想知道是否我使用相同的嵌入类的两个实体,因为在重命名BasicAuthAccountsId更通用的名称,删除UserAccountsId和两个实体使用相同的@EmbeddedId类?

+0

你有解决这个问题吗?我面临几乎相同的问题,但在我的情况下更糟糕,因为这两个表使用复合键中的这些列的不同名称。我正试图在两个实体之间做一个OneToOne关联。 – trafalmadorian 2011-01-07 04:39:09