Объекты JPA - org.hibernate.TypeMismatchException - PullRequest
0 голосов
/ 18 мая 2010

Окружающая среда: JDK 1.6, JEE5 Hibernate Core 3.3.1.GA, Hibernate Аннотации 3.4.0.GA DB: Informix

Использовал реверс-инжиниринг для создания моих персистентных сущностей из схемы БД [ Примечание: это схема в работе, которую я не могу изменить ]

Получение исключения при выборе списка basic_auth_accounts org.hibernate.TypeMismatchException: предоставлен идентификатор неправильного типа для класса ebusiness.weblogic.model.UserAccounts. Ожидается: класс ebusiness.weblogic.model.UserAccountsId, получен класс ebusiness.weblogic.model.BasicAuthAccountsId

И basic_auth_accounts, и user_accounts имеют составные первичные ключи и взаимно-однозначные отношения. Любые подсказки, что здесь делать? Это очень важно, чтобы я получил это на работу. Не удается найти какое-либо существенное решение в сети, некоторые говорят, что для создания класса идентификатора, который сделал Hibernate, а некоторые говорят, что не имеют отношения один к одному.

Пожалуйста, помогите мне !!

/**
* 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 голосов
/ 19 мая 2010

просто чтобы посмотреть / исследовать онлайн:

Из того, что я вижу, у меня есть две таблицы basic_auth_accounts и user_accounts, которые используют одни и те же составные ключи realmTypeId, realmQualifier и accountId. Обе сущности имеют встраиваемые классы с этими столбцами и отношения один-к-одному.

Я использовал инструменты hibernate для генерации этих объектов из схемы БД, которую я не могу изменить!

Мне интересно, если бы я использовал один и тот же встраиваемый класс для обеих сущностей, как в переименовании BasicAuthAccountsId для более общего имени, удалите UserAccountsId и для обеих сущностей используйте тот же класс @EmbeddedId?

...