具有一对多关系的实体不会在表

时间:2016-09-26 08:45:54

标签: java database entity-framework hibernate jpa

我在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。我该如何解决这个问题?

1 个答案:

答案 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;
}