Hibernate忽略@AttributeOverrides注释并在错误的表中创建列

时间:2019-07-07 08:44:36

标签: java hibernate jpa orm mapping

我有2个SQL表:

用户:

CREATE TABLE users
(
    id BIGINT PRIMARY KEY DEFAULT nextval('global_seq'),

    /* email, password, other fields */

);

Users_avatars:

CREATE TABLE users_avatars
(
    user_id BIGINT NOT NULL,
    file_name VARCHAR,
    file_path VARCHAR,

    FOREIGN KEY (user_id) REFERENCES users (id)
);

但是,为什么我尝试使用Hibernate对其进行映射,因此它在file_name表内创建了file_pathusers

我的课程如下:

@Entity
@Table(name = "users")
@SecondaryTable(name = "users_avatars",
        pkJoinColumns = @PrimaryKeyJoinColumn(name = "user_id", referencedColumnName = "id"))
public class User extends EntityWithId
{
    @Embedded
    @AttributeOverrides({
            @AttributeOverride(name = "file_name", column = @Column(table = "users_avatars")),
            @AttributeOverride(name = "file_path", column = @Column(table = "users_avatars"))
    })
    private FileInDb avatar;


    public FileInDb getAvatar()
    {
        return avatar;
    }

    public void setAvatar(FileInDb avatar)
    {
        this.avatar = avatar;
    }
}

和FileInDb类:

@Embeddable
@MappedSuperclass
public abstract class FileInDb
{
    @Column(name = "file_name")
    @NotNull
    @NotBlank
    private String fileName;

    @Column(name = "file_path")
    @NotNull
    @NotBlank
    private String filePath;

    public String getFileName()
    {
        return fileName;
    }

    public void setFileName(String fileName)
    {
        this.fileName = fileName;
    }

    public String getFilePath()
    {
        return filePath;
    }

    public void setFilePath(String filePath)
    {
        this.filePath = filePath;
    }
}

Hibernate生成的SQL脚本:

create table users (
   id int8 not null,
    file_name varchar(255),
    file_path varchar(255),
    /* Lots of other fields */
    primary key (id)
)
create table users_avatars (
   user_id int8 not null,
    primary key (user_id)
)

为什么会这样?请帮忙。预先感谢。

1 个答案:

答案 0 :(得分:0)

您可以将@OneToOne映射与@MapsId一起使用,以将user_id用作user_avatars表的ID字段