簡體   English   中英

具有一對多關系的實體不會在表中記錄外鍵

[英]Entity with one-to-many relationships does not record foreign key in table

我在sql server中有2個數據庫,在這兩個數據庫中,我具有相同的表“實體”和“字段”,並具有一對多關系。 我想將記錄保存到兩個數據庫中的那些表中,在第一個數據庫中我具有外鍵,但是在第二個數據庫中,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;
...
}

我在春季應用程序contex中創建了2個實體“ Entity”,“ Field”,創建了兩對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);
  }

在這種情況下,在保留了先前狀態的數據庫(數據庫“ administration”,表“ entities”,“ fields”)中,我將具有外鍵,但是在主數據庫“ apllication”中,我保留了實體,而我在表中沒有默認鍵'fields',JPA在此處寫入null。 我該如何解決?

您可以通過這種方式進行。 在您的控制器中以這種方式使用它。

@PostMapping("/entity")
public Entity postEntity(@RequestBody Entity entity) {

    if( entity.getFieldList().size() > 0 )
    {
        entity.getFieldList().stream().forEach( fieldItem -> {
            fieldItem.setEntity( entity );
        } );
    }
    return entity;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM