@SecondaryTable注解问题 [英] @SecondaryTable annotation problem

查看:168
本文介绍了@SecondaryTable注解问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下模型,

  
@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


请阐明这种行为。



类定义:
$ b

ManagedObject 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆