转换器应该直接访问存储库吗?

对于这个特殊的问题,我找不到任何答案,这使我不得不再次猜测自己的体系结构。基本上我有两个实体,BaseCategoryEntity和ItemEntity。

@Entity
public class ItemEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID",unique = true,nullable = false)
private Long itemId;

@ManyToOne
@JoinColumn(name = "BCID",nullable = false)
private BaseCategoryEntity baseCategory;

@Column(name = "NAME",nullable = false)
private String name;

....

ItemEntity具有对应的DTO ItemItemController收到一个Item,并将其传递给ItemService,然后使用转换器将其保存到存储库中。

@Service
public class ItemService {

  @Autowired
  ItemRepository repository; //this is a CrudRepository

  @Autowired
  ItemConverter converter;

  public void add(Item item){
      repository.save(converter.convertFrom(item));
  }

}

转换器看起来像这样

@Component
public class ItemConverter{

  @Autowired
  BaseCategoryConverter bcConverter;

  public ItemEntity convertFrom(Item model) {
    ItemEntity entity = new ItemEntity();
    entity.setName(model.getName());         
entity.setBaseCategory(bcConverter.convertFrom(model.getBaseCategoryName()));
    return entity;
  }
}

通过运行此代码,我得到 org.hibernate.TransientPropertyValueException:非null属性引用了一个瞬态值错误,因为未设置BaseCategoryEntity的ID。 解决此问题的最简单方法似乎是将ItemRepository自动布线为ItemConverter,将BaseCategoryRepository自动布线为BaseCategoryConverter,因此我可以将convertFrom更改为首先检查如果实体已经存在并使用该实体,则创建并保存该实体(如果不存在)。 但是,转换器执行这种逻辑似乎不合适。

tong817480 回答:转换器应该直接访问存储库吗?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3163078.html

大家都在问