2017-06-14 111 views
0

我有一个普遍的问题,因为我现在真的很沮丧和不确定。Spring Boot + JPA + mysql ...错误的方法?

我:

  • 工作PHP REST API
  • 丑陋的MySQL数据库

并希望将其重构为:

  • 春天启动的microService(S)
  • 与JPA /休眠
  • MySQL DB

我有一个在本地fabric8集群上运行的Spring引导服务。

现在我想访问MySQL数据库。

  • 创造了的POJO /与大理的Eclipse实体(Hibernate或者JPA 2.1都尝试)

  • 试图简单CRUDRepository.findAll()

这里问题开始了(以前有很多,但确定)

  1. 我有一个命名约定问题与生成POJO和DB 通过配置来解决:

    spring.jpa.hibernate.naming.implicit策略= org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl在Eclipse其中有 spring.jpa.hibernate.naming.physical策略= org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

  2. 一些JDBC驱动程序和类版本的问题是固定用手工下载的罐子。

  3. 无限循环与crudRepo.findAll()导致递归POJO关系 解决了

    设置下的每个@OneToMany 一个@JsonManagedReference并在每个@ManyToOne

我知道@JsonBackReference事情会变得更复杂,因为我有DB请求需要只有一些值一个表和其他一些请求是基于几个表(加入) 而我有问题找到正确的文档描述这样的用例。 或者只需要为每个UseCase创建一个自己的POJO?

现在我的问题是:

  • 我是否有正确的做法还是有更好的建议?
  • 我错过了哪些文件可以解释这些问题?

由于事情从未像预期的那样工作,因为我开始这个项目,如果我做对了,我会奋斗。 尤其是MySQL的DB访问似乎与的Hibernate/Spring的启动那么多问题。

我使用JPA的工作早,觉得很舒服,但现在看来,这样不必要的复杂。

如果您能分享您的想法,我将不胜感激!

+1

JsonBackReference是杰克逊的注解,所以如果是解决递归问题,他们是不相关的JPA或弹簧启动。您正在使用多种技术来做非常不同的事情JSON <-> Java <-> DB,并且必须具有您的模型,适用于每条腿的配置和罐子。您没有提出我们可以提供帮助的问题,因为我们不知道您采取了什么方法,而且无论如何都是基于意见。有许多JPA演示和教程可供您查看并适应您的需求。 – Chris

+1

也许这正是我需要听到的(阅读)。有很多部分一起工作,所以我忽略概述什么症状是由什么引起的......我会花一些时间在继续之前获得更好的概述。 感谢那个小头。。 –

回答

4

当然春季(引导)的是巨大的,在开始的时候可以是压倒性的 - 特别是如果你添加Web和持久层 - 但是如果你知道从哪里开始就变得很容易实现几乎任何要求。

正是你的意思是用“生成的POJO”什么?通常您手动编写Java实体,并使用注释(或XML)定义到(已经存在的)数据库模式的映射,例如一个简单的Hibernate映射可能看起来像this。所以如果你这样做,就不应该再有命名问题了。

解决方案“用手工下载的罐子固定”听起来很奇怪,最好使用依赖管理工具,如mavengradle。例如。与maven你也可以include/exclude某些依赖如果有东西不符合你的需求。 Spring确实支持maven和gradle。

很多JSON/Jackson教程可以找到herebaeldung site通常是寻找春季教程的好点。

要管理“仅表格中的某些值”或“多个表格(联接)”等事物,Spring Data JPA尤其是Spring Data JPA Projections很有用,但请注意生成的查询存在的问题。关于映射和持久性材料的一个很好的知识来源是Vlad's Blog。如果你想在没有Spring Data JPA的情况下工作,还有Hibernate result set mappings

+0

“生成的POJO”由eclipse中的Dali工具自动创建。但是也有所有的关系。 –

+0

啊,好的。我不知道那个工具。但手动编写实体更可靠,恕我直言。 –

1
  1. 如前所述,如果使用注释或xml的任何一种方法正确映射列名称,则可以跳过命名约定部分。
  2. 我会建议,如果你开始与hql和命名查询使用hibernate。如果最初有存储过程,则再次使用命名查询。
  3. 如果您要采用微服务方式,Spring引导可能非常方便,但您需要在此之前实现像maven这样的绑定工具。只需更改pom.xml中的最新版本号,就可以自动将最新的jar放在类路径中(已下载)。最初这个过程似乎难以捉摸,花费时间,但它将在未来帮助您的团队提供很多灵活性。
+0

谢谢,这有点重要。我会记住这一点。 –

+0

@GregorSklorz不客气。考虑先使用maven,微服务和健康的测试工具或所有微服务的注册管理器。 –

+0

@GregorSklorz如果您喜欢答案,请发送upvote。 –