环境: 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;
}
课程的主要代码是:
答案 0 :(得分:0)
只是为了跟进在线观看/研究:
从我可以看到我有两个表basic_auth_accounts和user_accounts使用相同的复合键realmTypeId,realmQualifier和accountId。 两个实体都具有可嵌入的类,这些列具有这些列和一对一的关系。
我使用了hibernate工具从DB模式生成这些实体,我无法改变!
我想知道我是否为两个实体使用了相同的嵌入类,如将BasicAuthAccountsId重命名为更通用的名称,删除UserAccountsId并且两个实体都使用相同的@EmbeddedId类?