public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(schema = "company",
name = "company_settings",
joinColumns = @JoinColumn(name = "company_id"))
private List<Settings> settings;
}
航路迁移
CREATE TABLE company.company_settings (
id serial primary key,
...
);
设置类
@Entity
@Table(schema = "company")
@Getter
@Setter
public class Settings {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
}
问题我所看到的
Caused by: org.postgresql.util.PSQLException: ERROR: relation "company.settings" does not exist
为什么我不想在@Table中使用表名-我还需要为另一个表使用Settings类。这将是相同的表,但用户。
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(schema = "user",
name = "user_settings",
joinColumns = @JoinColumn(name = "user_id"))
private List<Settings> settings;
}
我想有两个表user_settings
和company_settings
在不同的模式。可以用@JoinTable
来做吗?我可以使用一个类,并为用户和公司扩展它,或者我可以为他们两个都有一个表。
1条答案
按热度按时间n53p2ov01#
与实体类关联的表是实体类本身的特征,而不是与它有关系的其他类的特征。因此,在给定的持久性单元中,不能将一个实体类Map到多个不同的表。
但是,也许您可以使用多个不同实体的Map超类来接近您想要的内容。您可以:
Company
和User
实体需要将它们的关系Map到它们各自的Settings
变体,但是您仍然可以通过这种方式减少设置实体之间的代码重复。比如说,您可以将
CompanySettings
es和UserSettings
es一般地处理为Settings
es,无论在何处,如果这样做是有意义的(不包括在Company
或User
中)。