@SecondaryTable注解问题 [英] @SecondaryTable annotation problem
问题描述
我有以下模型,
@Entity
@Table(name =user )
@PrimaryKeyJoinColumn(name =user_id)
@SecondaryTables({
@SecondaryTable(name =user_personal_details,pkJoinColumns = {@PrimaryKeyJoinColumn(name =user_id,referencedColumnName = user_id)}),
@SecondaryTable(name =user_address,pkJoinColumns = {@PrimaryKeyJoinColumn(name =user_id,referencedColumnName =user_id)}),
@SecondaryTable(name = user_contact_info,pkJoinColumns = {@PrimaryKeyJoinColumn(name =user_id,referencedColumnName =user_id)}),
@SecondaryTable(name =user_auth_info,pkJoinColumns = {@PrimaryKeyJoinColumn(name =user_id,referencedColumnName =user_id)})
))
public abstract class用户扩展Member implements IUser {
@Column(table =user_personal_details)
private UserPersonalDetails personalInfo;
@Column(table =user_address)
私有地址;
@Column(table =user_contact_info)
private UserContactDetails contactDetails;
@Column(table =user_auth_info)
private UserAuthInfo authInfo;
...
}
当我尝试插入 User
出现如下错误:
10641 [main] ERROR org。 hibernate.AssertionFailure - 发生断言失败(这可能表明Hibernate中存在错误,但更可能是由于会话的不安全使用)
org.hibernate.AssertionFailure:未找到表user_personal_details
请阐明这种行为。
类定义:
$ bManagedObject Class
@Entity
@Table(name =managed_object)
@Inheritance(strategy = InheritanceType.JOINED)
公共抽象类ManagedObject实现IManagedObject
{
@Id
@Column(name =mo_id,nullable = false,updatable = false)
私人字符串ID;
@Column(name =mo_name,nullable = false,updatable = true)
私人字符串名称;
@Column(name =mo_type,nullable = false,updatable = true)
私有字符串类型;
@Column(name =mo_additional_info,nullable = true,updatable = true)
private String additionalInfo;
...
}
会员类别
@实体
@Table(name =t_member )
@PrimaryKeyJoinColumn(name =member_id)
public abstract class Member extends ManagedObject implements IMember {
}
类似UserPersonalDetails的Data / Info类
$ @
$ b @Embeddable
@Table
public class UserPersonalDetails extends InfoObject {
private String firstName;
private String middleName;
private String lastName;
...
}
更新:
在UserPersonalDetails成员中添加了 @Column(table =)
注释, @Embedded
在用户
类中的注释。
我遇到以下异常:
4469 [main] ERROR org.hibernate.AssertionFailure - an断言失败(这可能表明Hibernate中存在一个错误,但更可能是由于会话的不安全使用)
org.hibernate.AssertionFailure:未找到表user_personal_details
在字段中删除所有 @Column
code> @Column 作为方法。另外,仅为辅助表名称字段指定 @table(Column =SecondaryTableName)
。这个实现解决了我的问题。
I have following model,
@Entity
@Table(name = "user")
@PrimaryKeyJoinColumn(name="user_id")
@SecondaryTables({
@SecondaryTable(name = "user_personal_details", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "user_id", referencedColumnName = "user_id")}),
@SecondaryTable(name = "user_address", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "user_id", referencedColumnName = "user_id")}),
@SecondaryTable(name = "user_contact_info", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "user_id", referencedColumnName = "user_id")}),
@SecondaryTable(name = "user_auth_info", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "user_id", referencedColumnName = "user_id")})
})
public abstract class User extends Member implements IUser {
@Column(table="user_personal_details")
private UserPersonalDetails personalInfo;
@Column(table="user_address")
private Address address;
@Column(table="user_contact_info")
private UserContactDetails contactDetails;
@Column(table="user_auth_info")
private UserAuthInfo authInfo;
...
}
When I try to insert a subclass of User
I get an error shown below
10641 [main] ERROR org.hibernate.AssertionFailure - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure:Table user_personal_details not found
Please shed some light on this behavior.
Class Definitions:-
ManagedObject Class
@Entity
@Table(name="managed_object")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class ManagedObject implements IManagedObject
{
@Id
@Column(name="mo_id", nullable=false, updatable=false)
private String id;
@Column(name="mo_name", nullable=false, updatable=true)
private String name;
@Column(name="mo_type", nullable=false, updatable=true)
private String type;
@Column(name="mo_additional_info", nullable=true, updatable=true)
private String additionalInfo;
...
}
Member Class
@Entity
@Table(name="t_member")
@PrimaryKeyJoinColumn(name="member_id")
public abstract class Member extends ManagedObject implements IMember {
}
One of the Data/Info Class like UserPersonalDetails
@Embeddable
@Table
public class UserPersonalDetails extends InfoObject{
private String firstName;
private String middleName;
private String lastName;
...
}
Update:
Added @Column(table="")
annotation in UserPersonalDetails members and yes I do have @Embedded
annotation in User
class.
I have encountered following exception:
4469 [main] ERROR org.hibernate.AssertionFailure - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: Table user_personal_details not found
remove all @Column
in the fields and give @Column
for the methods. Also specify the @table(Column="SecondaryTableName")
only for the secondary table names fields. This implementation solved my problem.
这篇关于@SecondaryTable注解问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!