小编Dhe*_*rik的帖子

(Java)包组织是否有最佳实践?

不久之前,我在这里看到了一个关于java包的细粒度组织的问题.例如,my.project.util,my.project.factory,my.project.service,等.

我现在找不到,所以我不妨问一下这个问题.

是否有关于Java程序包组织的最佳实践以及它们的内容?

如何在Java项目中组织课程?

例如,我正在与一些人合作的项目有一个名为beans的包.它最初是一个包含简单豆类的项目,但最终(通过糟糕的经验和缺乏时间)包含所有内容(几乎).我通过在工厂包中放置一些工厂类(使用创建bean的静态方法的类)来清理它们,但我们有其他类来执行业务逻辑,而其他类则执行简单处理(不使用业务逻辑),如检索来自属性文件的代码消息.

感谢您的想法和意见.

java naming-conventions package

190
推荐指数
7
解决办法
12万
查看次数

适用于移动应用的OAuth 2.0流程是什么?

我正在尝试使用OAuth 2.0在移动应用程序的Web API中实现委派授权.根据规范,隐式授权流程不支持刷新令牌,这意味着一旦授予访问令牌一段特定时间,用户必须在令牌过期或撤销后再次向应用程序授予权限.我想这对于在浏览器上运行的一些javascript代码来说是一个很好的场景,正如规范中提到的那样.我试图最小化用户必须向应用授予权限以获取令牌的时间,因此看起来授权代码流是一个很好的选择,因为它支持刷新令牌.但是,此流程似乎很大程度上依赖于Web浏览器来执行重定向.我想知道如果使用嵌入式Web浏览器,这个流程对于移动应用程序仍然是一个不错的选择.

security mobile oauth-2.0

79
推荐指数
3
解决办法
5万
查看次数

忽略关系中的FetchType.EAGER

我在大型应用程序中遇到EAGER关系问题.此应用程序中的某些实体EAGER与其他实体有关联.这在某些功能中变成了"毒药".

现在我的团队需要优化这些功能,但我们不能将获取类型更改为LAZY,因为我们需要重构整个应用程序.

所以,我的问题:是否有办法在我返回的实体中忽略EAGERs关联来执行特定查询?

示例:当我有这个实体Person时,我想在查询人员时不带地址列表.

@Entity
public class Person {

  @Column
  private String name;

  @OneToMany(fetch=FetchType.EAGER)
  private List<String> address;

}

Query query = EntityManager.createQuery("FROM Person person");
//list of person without the address list! But how???
List<Person> resultList = query.getResultList();
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新

我找到的唯一方法是不返回实体,只返回实体的某些字段.但我想找到一个可以返回实体的解决方案(在我的例子中,Person实体).

我在想是否可以在Hibernate中将同一个表映射两次.通过这种方式,我可以在没有EAGER关联的情况下映射同一个表.在一些情况下,这对我有帮助......

java hibernate jpa hql jpql

25
推荐指数
2
解决办法
1万
查看次数

如何在@HandleBeforeSave事件中获取旧实体值以确定属性是否已更改?

我正试图在一个@HandleBeforeSave事件中得到旧实体.

@Component
@RepositoryEventHandler(Customer.class)
public class CustomerEventHandler {

    private CustomerRepository customerRepository;

    @Autowired
    public CustomerEventHandler(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
    }

    @HandleBeforeSave
    public void handleBeforeSave(Customer customer) {
        System.out.println("handleBeforeSave :: customer.id = " + customer.getId());
        System.out.println("handleBeforeSave :: new customer.name = " + customer.getName());

        Customer old = customerRepository.findOne(customer.getId());
        System.out.println("handleBeforeSave :: new customer.name = " + customer.getName());
        System.out.println("handleBeforeSave :: old customer.name = " + old.getName());
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用该findOne方法获取旧实体,但这将返回新事件.可能是因为当前会话中的Hibernate/Repository缓存.

有没有办法获得旧实体?

我需要这个来确定给定的属性是否被更改.如果属性是更改,我需要执行一些操作.

java hibernate spring-data-rest

22
推荐指数
3
解决办法
9465
查看次数

如何解决受保护分支上的合并冲突?

我有一个分支,是一个分支的分支masterrelease如果你愿意的话,它更像是一个分支。该release分支受到保护。

master ---> release
Run Code Online (Sandbox Code Playgroud)

从这个release分支开始,我将我的功能从它中分离出来并将其合并到:

master ---> release <--- features
Run Code Online (Sandbox Code Playgroud)

现在,一旦我的功能进入这个release分支,就会出现合并冲突。我的问题就在这里。我知道如果它不是受保护的分支,如何解决冲突,但我不知道如何解决它。

我尝试做的是这样的:

master ---> release ---> release-fix
Run Code Online (Sandbox Code Playgroud)

在 中release-fix,我会重新设置基础master并将其向上推,并使该 PR 的基础成为分支release。但是当我制作 PR 时,它说它仍然无法自动合并。这是做这样的事情的正确方法吗?

git

21
推荐指数
2
解决办法
2万
查看次数

如何离开连接在Hibernate中获取多个子节点?

我正在使用hibernate,我遇到了创建一个hql查询的问题,该查询获取了我对象的所有子项.

例如:对象用户有一个汽车列表和一个好友列表.

为了让用户获得他的汽车,我将使用以下查询:

from User u left join fetch u.cars where u.id = ?
Run Code Online (Sandbox Code Playgroud)

这工作得很好,所以我认为这将是很容易得到用户用他的车和他的朋友与以下查询:

from User u left join fetch u.cars left join fetch u.friends where u.id = ?
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

HibernateException:无法同时获取多个包

现在我的问题是:在hibernate中获取多个子节点的正确方法是什么?

hibernate hql fetch

18
推荐指数
2
解决办法
4万
查看次数

JPQL 查询 - 休眠:提取的关联不允许带子句

我有这样的 JPA 存储库和 JPQL 查询:

@Query("SELECT c from Campaign c" +
        " left join fetch c.postsList p on p.status = :postStatus" +
        " left join fetch p.platform" +
        " left join fetch c.campaignStatistics stat on stat.updateDate = :updateDate" +
        " where c.id =:id")
Campaign findCampaignWithPosts(
        @Param("id") Long id,
        @Param("postStatus") PostStatus postStatus,
        @Param("updateDate") LocalDate updateDate);
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我得到:

org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause not allowed on fetched associations; use filters
Run Code Online (Sandbox Code Playgroud)

我去研究了有关 JPA 2.1 规范的信息,这就是我发现的:

用于连接的连接条件来自映射的连接列。这意味着 JPQL 用户通常不必知道每个关系是如何连接的。在某些情况下,需要向连接条件附加附加条件,通常是在外部连接的情况下。这可以通过 ON 子句来完成。ON 子句在 JPA 2.1 规范中定义,并且某些 JPA 提供程序可能支持。EclipseLink : …

java hibernate jpa join jpql

14
推荐指数
2
解决办法
7818
查看次数

使用左连接提取重复

我正在使用HQL查询来获取某些记录.如果我使用LEFT JOIN FETCH我的目标实体中的集合将包含重复记录.如果我只使用左连接,它不会.我想当Hibernate懒惰地加载记录时,它避免了重复.

"SELECT z FROM ", TableA.TABLE_NAME, " z ",  //
            "LEFT JOIN FETCH z.attributeX pv ", //
            "LEFT JOIN FETCH pv.attributeY anteil ", //
            "LEFT JOIN FETCH z.attributeB kma ", //
            "LEFT JOIN FETCH kma.attributeC ", //
            "WHERE anteil.attributeD.attributeE.id = :eId ", //
            "AND pv.attributeG.id = :gId ");
Run Code Online (Sandbox Code Playgroud)

我的实体TableA有一个指向TablePV(LEFT JOIN FETCH z.attributeX pv)的链接

TablePV有一个TableY(LEFT JOIN FETCH pv.attributeY anteil)的集合

现在Hibernate将正确映射所有内容,除了孩子们TablePV.它将包含几次相同的记录.一个明显的TableA没有帮助,因为那里没有重复.我可以手动删除那些非常不合适的记录.

hibernate jpa hql left-join fetch

11
推荐指数
2
解决办法
4452
查看次数

具有多个主键的资源的REST API URI

我正在为我的项目开发一个通用的REST API,我想知道当我有一个包含2个或更多主键表/资源时该怎么做.

例如,假设我有一个名为"question"的表,其中包含两个主键(日期和类型),我需要创建资源REST URI.遵循标准架构的最佳方法是什么api/{resource}/{id}

也许是这样的:api/question/{:date},{:type}?最好的方法是什么?

谢谢.

rest api-design restful-architecture

11
推荐指数
1
解决办法
5016
查看次数

Kubernetes Cron Job的呼叫端点

我有一个在Kubernetes集群中的Docker容器中运行的webapp。该应用程序具有一个我想定期调用的端点。该应用程序在多个节点/吊舱中运行,重要的是只有一个节点执行端点发起的任务。我看过Kubernetes Cron Jobs,但没有找到有关从Kubernetes Cron Job调用端点的任何文档。有人有解决这个问题的建议吗?在只有一个节点执行任务的群集中,您如何处理调度?

cron kubernetes kubernetes-cronjob

9
推荐指数
1
解决办法
4987
查看次数