【发布时间】:2019-08-12 03:39:50
【问题描述】:
我将创建一个实现继承概念的模型。我在想可以通过创建两个(或更多)表(一个用于父类,另一个用于子类),然后基于该表创建两个(或更多)模型。
我目前创建了一个充当父类的模型,并将其抽象化
@NoArgsConstructor // lombok
@AllArgsConstructor // lombok
@Data // lombok
@Entity(name="Account")
@Inheritance
public abstract class AccountModel {
@Id
@Column(name="username")
private String username;
// Some other fields and getters and setters here
}
然后创建扩展类的子类
@NoArgsConstructor // lombok
@Data // lombok
@EqualsAndHashCode(callSuper=true) // lombok
@Entity(name="Administrator")
public class AdministratorModel extends AccountModel {
@Id
@Column(name="username")
private String username;
// some other fields and getters and setters here
}
(目前使用用户名作为join)
我为这两个模型创建了两个存储库
@Repository
public interface AccountRepository extends JpaRepository<AccountModel, String>{};
@Repository
public interface AdministratorRepository extends JpaRepository<AdministratorModel, String>{};
然后,我通过使用JpaRepository.save() 方法尝试将新的AdministratorModel 对象保存到AdministratorRepository 来测试它。
我期望此设置会将对象中的数据填充到数据库上的两个表中,并自动将所有属性映射到每个表。但是,数据只保存在父表上的一条记录,并添加新列(一列是可能引用子表的东西,另一列是子表的属性,不添加连接列'username') , 同时将子表留空。
我认为我做错了。
那么,如何让它按预期工作呢?
我应该不使用继承并使用两个(或更多)存储库手动保存模型,还是应该只使用自定义查询创建一个存储库,还是有其他方法?
【问题讨论】:
标签: java spring rest spring-boot jpa