我使用Formsy.Form.prototype.validate = function(component) {
console.log('test');
}
将bean架构映射到多个表:
SecondaryTable
然后我如何告诉spring创建一个使用表@Entity
@Table(name = "address1")
@SecondaryTables({
@SecondaryTable(name="address2")
})
中的值的Repository
?
address2
然后,我希望能够仅interface AddressRepository extends CrudRepository<Address, Long> {
//this one uses address1
}
查询辅助表格。但是,我如何明确告诉spring使用上面的CrudRepository
查询address2
表?
(将address2-table视为一种归档表。只有在主address1-table中找不到地址,才应查询address2。)
答案 0 :(得分:3)
我认为你误解了@SecondaryTable
的用途。这是一种在不同数据库表之间拆分单个实体的方法。
来自文档(http://docs.oracle.com/javaee/7/api/javax/persistence/SecondaryTable.html)
指定带注释的实体类的辅助表。指定 一个或多个辅助表指示实体的数据 class存储在多个表中。如果没有SecondaryTable 指定了注释,假定所有持久字段或 实体的属性映射到主表。如果不 指定了主键连接列,假定连接列 引用主表的主键列,并具有 与引用的主键列相同的名称和类型 主要表格。
您的注释在当前状态下表示存在Address
实体,其中包含address1
和address2
表中的数据,可以通过加入主键进行组合address1
表格。
我认为,对于你想要做的事情,让它在不覆盖你的CrudRepository
的情况下工作,就是使用不同的表格。如果我理解正确的话,你无论如何都需要查询这两个表。
答案 1 :(得分:3)
您可以使用SecondaryTable(如user和user_address表)表示两个表,这些表在一个实体中存储不同但相关的数据。您正在尝试将相同的数据存储在两个完全相同的不同表中。因此,SecondaryTable不适合您的需求。您应该将继承注释与每个类的策略表一起使用。这是一个例子;
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class AddressBase {
...
...
...
}
@Entity
@Table(name='address1')
public class Address1 extends AddressBase {}
@Entity
@Table(name='address2')
public class Address2 extends AddressBase {}
然后,您可以为每个实体编写存储库并执行您想要的任何操作。