小编And*_*ing的帖子

在@MappedSuperclass上使用@NamedEntityGraph属性

我尝试了很多不同的东西,做了大量的研究,但仍然无法完成以下工作:我想@NamedEntityGraph在一个实体上定义一个,但我引用的属性位于父类中,该类定义为@MappedSuperclass.

我有轻微的感觉(在检查代码如何构建实体图之后),这不起作用,但也许有人可以对它有所了解.

这里详细介绍了我们要做的事情(缩短了一些事情):

@MappedSuperclass
public class UserBase {
  private Long id;
  private String loginname;
  private String password;

  @ManyToMany(fetch = FetchType.LAZY)
  private Set<Role> roles;
  ....
}
Run Code Online (Sandbox Code Playgroud)

而实际的实体:

@Entity
@NamedEntityGraph(
  name = "withRoles",
  attributeNodes = { @NamedAttributeNode("roles") })
public class User extends UserBase {
   ....
}
Run Code Online (Sandbox Code Playgroud)

会发生什么,我们得到错误

Unable to locate Attribute with the the given name [roles] on this ManagedType [some.package.path.User]
Run Code Online (Sandbox Code Playgroud)

单步执行图创建代码,我可以看到它只查看类本身定义的属性,而不是超类型.我有可能以这种方式定义图形,这有效吗?

谢谢你的任何提示!

java inheritance hibernate jpa

5
推荐指数
1
解决办法
1215
查看次数

在Spring Data上订阅两次MongoDB save()会导致双重插入

我们遇到了以下我们理解的行为,但是我们想知道它是否是预期的,以及将它记录为某种陷阱可能是有意义的.

我们正在试验Spring Boot 2/Spring WebFlux并设置一个基本上有这样的东西的小应用程序(全部缩短):

@PostMapping
public Mono<Todo> addTodos( @RequestBody Person person ) {
    return personService.addPerson( person );
}
Run Code Online (Sandbox Code Playgroud)

该服务首先看起来像这样,因为我们想要将一个人的事件也发布到消息队列:

public class PersonService {
    public Mono<Person> addPerson( Person person ) {
        Mono<Person> addedPerson = personRepository.save( person );
        addedPerson.subscribe( p -> rabbitTemplate.convertAndSend( "persons", p ) );
        return addedPerson;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,这样做显然是错误的.该.subscribe()触发器的流动和我们假设反应REST控制器确实在背景相同的序列化的数据的响应,从而导致第二平行流动之前.最后,我们最终persons在数据库中的集合中有两个重复的条目.

在这个冗长的介绍之后,最后的问题是:这是多个订阅者触发多个插入的预期行为(基本上,如果您订阅n时间,您会获得n插入)?

如果是的话,这对于初学者来说可能是一个陷阱,特别是如果我们的理解是正确的,那么反应式REST控制器就会发挥作用.subscribe().

spring spring-mvc spring-data-mongodb project-reactor reactive

0
推荐指数
1
解决办法
1152
查看次数