java如何使用六边形体系结构将域对象映射到Jpa实体
在阅读了关于六边形体系结构的文章之后,我决定实现这些实践。我只想知道如何将域对象映射到域实体。这是我试过的
//jpa实体
@Entity
@Data
public class Worker {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String phoneNumber;
private String firstName;
private String lastName;
private String workerType;
private String ifu;
private String workerPicture;
private String statut;
@OneToMany(mappedBy = "worker")
Set<CategoryWorker> category;
}
//域模型
public class Worker {
private Long id;
private String phoneNumber;
private String firstName;
private String lastName;
private String workerType;
private String ifu;
private String imageParth;
private String statut;
}
//输出
public interface ListOfWorkerRepository {
public List<Worker> findAll();
}
//输入端口
public interface ListOfWorker {
public List<Worker> findAll();
}
//适配器输出
public class ListWorkerImpl implements ListOfWorkerRepository{
WorkerJpaInterface workerJpaInterface;
@Override
public List<Worker> findAll() {
return workerJpaInterface.findAll();
}
}
// here I have an conversion error
# 1 楼答案
我猜这是因为这两个班都叫“工人”。如果你将其重命名为“WorkerJpa”和“WorkerDomain”,你会发现问题所在。 我说‘我猜’是因为我们看不到堆栈跟踪和包结构有助于分析。 你需要一种WorkerMapper(比如实体到数据到映射器、java类或使用MapStruct等)。通常它应该在WorkerJpa包中,因为我们假设外部工作者类结构可以更改,并且应该由映射器调整到域实体
# 2 楼答案
这里:
正如crush84正确指出的那样,它们是不同的类,因此会出现转换错误。我认为你需要通过jpa
Worker
为每一个创建一个新的域模型Worker
在导入和使用
Worker
时要非常小心,不要混淆它们。也许你可以将它们重命名为更具描述性的名称,以避免将来出现混淆?我希望这有帮助:D