JPA实体 - org.hibernate.TypeMismatchException

时间:2010-05-18 05:32:16

标签: hibernate jpa annotations composite-id

环境: JDK 1.6,JEE5 Hibernate Core 3.3.1.GA,Hibernate Annotations 3.4.0.GA DB:Informix的

使用逆向工程从db模式创建持久性实体[ NB:这是工作中的模式我无法更改]

选择basic_auth_accounts列表时获取异常org.hibernate.TypeMismatchException:为类ebusiness.weblogic.model.UserAccounts提供了错误类型的id。预期:类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;
    }

课程的主要代码是:

1 个答案:

答案 0 :(得分:0)

只是为了跟进在线观看/研究:

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

我使用了hibernate工具从DB模式生成这些实体,我无法改变!

我想知道我是否为两个实体使用了相同的嵌入类,如将BasicAuthAccountsId重命名为更通用的名称,删除UserAccountsId并且两个实体都使用相同的@EmbeddedId类?