我将开始一个新项目来学习弹簧靴,弹簧数据和六边形结构.根据我的理解,六边形体系结构旨在将核心或域层与数据库操作(Infrastructure Layer)分开.我已经看到了这个架构的以下项目结构.
核心层有:
服务 - >逻辑走向(接口及其实现).
实体 - >这些将在整个应用程序中使用.
存储库 - >基础结构层必须实现的接口.
Infrastructure Layer具有Repository接口,JPA实体,对数据库的调用(hibernate)以及将JPA实体转换为Core Entities(mappers?)的某种函数的实现.
Spring数据有一种非常有用的方法来实现CRUD操作:
public interface UserRepository extends JpaRepository<User, Integer> {
}
Run Code Online (Sandbox Code Playgroud)
不过,我觉得如果我用春天的数据,JPA的实体将不会是基础设施层的一部分,如果UserRepository是核心层的一部分.这意味着核心实体将毫无用处.我应该创建另一个属于核心层的UserRepository接口还是我缺少的东西?
更新:
我对使用spring数据的关注来自于我必须在域内包含JPA实体,理论上它会违反六边形体系结构.
所以我想将域实体与JPA实体分开.但是,如果我这样做,我不知道Spring Data的存储库应该去哪里,也找到了将JPA实体转换为Domain实体的方法.
为了更好地说明一点,我将假设我需要从我的应用程序连接到数据库以读取用户表.
这可能是域实体:
public class UserDomain{
private String name;
....//More fields, getters, and setters.
Run Code Online (Sandbox Code Playgroud)
根据我的理解,服务应包括逻辑并操作域实体.
public interface UserService{
public void create(UserDomain user);
...
Run Code Online (Sandbox Code Playgroud)
实施:
public class UserServiceImpl implements UserService{
public void create(UserDomain user) {
... //Calling the repository(Spring Data Repository?)
Run Code Online (Sandbox Code Playgroud)
以上与存储库接口是我认为的域(如果我错了请纠正我).接下来,基础架构由JPA实体组成
@Entity
@Table(name="users")
public class User{
@Column(name="name")
private String name;
... // …Run Code Online (Sandbox Code Playgroud) 我有一台装有Ubuntu 16.10的计算机(yakkety),它可以完美地运行javafx应用程序。但是,即使我具有相同的openjfx软件包(8u102-b14-1),当我尝试在另一台使用ubuntu 18.10(宇宙)的计算机上运行相同的应用程序时,却遇到此异常。其他openjfx仿生软件包也不起作用。
$ java -jar target/app.jar
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: com.sun.glass.ui.gtk.GtkApplication._isDisplayValid()Z
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:267)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
... 5 more
Caused by: java.lang.UnsatisfiedLinkError: com.sun.glass.ui.gtk.GtkApplication._isDisplayValid()Z
at com.sun.glass.ui.gtk.GtkApplication._isDisplayValid(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.isDisplayValid(GtkApplication.java:83)
at com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:67)
at com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
at com.sun.glass.ui.Application.run(Application.java:146)
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257)
... 9 more
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个问题吗?