我有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_path
和users
。
我的课程如下:
@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)
)
为什么会这样?请帮忙。预先感谢。
答案 0 :(得分:0)
您可以将@OneToOne映射与@MapsId一起使用,以将user_id用作user_avatars表的ID字段