我在sql server中有2个数据库,在两个数据库中我有相同的表'实体'和' field'与一对多的关系。我想将记录保存到两个数据库中的那些表中,在第一个数据库中我有外键但在第二个数据库中JPA不能创建外键。
@javax.persistence.Entity
@Table(name = "entities")
public class Entity{
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "entity_id")
private List<Field> fieldList;
...
}
@javax.persistence.Entity
@Table(name = "fields")
public class Field {
@Id @Column(name = "id")
private String id;
...
}
我在春季应用程序上下文中创建了2个实体&#39;实体&#39; Field&#39;我创建了2对bean:
DriverManagerDataSource, LocalContainerEntityManagerFactoryBean, JpaTransactionManager
等级DAO:
public class EntityDao {
@PersistenceContext(unitName = "application")
private EntityManager entityManager;
@Transactional("transactionManager")
public Entity addEntity(Entity entity){
entityManager.persist(entity);
}
}
public class PreviousStateEntityDao {
@PersistenceContext(unitName = "administration")
private EntityManager entityManager;
@Transactional("transactionManagerAdministration")
public Entity addPreviousStateEntity(Entity entity){
entityManager.persist(entity);
}
}
所以当我尝试持久化实体时,在第一个数据库中我有第二个外键我没有外键。我的服务如下:
public class EntityServiceImpl implements EntityService {
@Autowired
EntityDao entityDao;
@Autowired
PreviousStateEntityDao previousStateEntityDao;
public void addEntity(Entity entity) {
previousStateEntityDao.addPreviousStateEntity(entity);
entityDao.addEntity(entity);
}
在这种情况下,我保留以前的状态(DB&#39;管理&#39;,表&#39;实体&#39;,&#39;字段&#39;)我会有外键但是在主DB&#39; apllication&#39;我保留实体的地方我不会在表格中输入密钥,JPA会在那里写入null。我该如何解决这个问题?
答案 0 :(得分:0)
您可以通过这种方式进行操作。在您的控制器中以这种方式使用它。
@PostMapping("/entity")
public Entity postEntity(@RequestBody Entity entity) {
if( entity.getFieldList().size() > 0 )
{
entity.getFieldList().stream().forEach( fieldItem -> {
fieldItem.setEntity( entity );
} );
}
return entity;
}