gpt4 book ai didi

java - 如何从 Spring Boot 中的实体访问存储库?

转载 作者:行者123 更新时间:2023-11-30 10:25:38 25 4
gpt4 key购买 nike

在 Spring Boot 项目中,我有一个 JPA 实体,如下所示:

@Entity
public class Account {
}

然后我有存储库来查询数据库:

public interface AccountRepository extends JpaRepository<Account, UUID> {

}

在应用程序和测试中,很容易通过以下方式获取存储库:

@Autowired
private AccountRepository accountRepository;

如何在 Account 类的方法中获取存储库?我尝试了@Autowired,但它没有用。

对于那些争论设计的人,我的问题不是关于设计。我用 Ruby 和 Rails 以及使用 HugSQL 的 Clojure 编写了这段代码,它是自包含且简洁的:在创建新记录时,我还生成了一个紧凑的唯一字母数字 ID。在 Ruby on Rails 中,我将其作为库发布:https://github.com/pupeno/random_unique_id

最佳答案

我有同样的问题并找到了 this Github repository .

部分代码如下:

...
import de.ck35.example.ddd.jpa.SpringEntityListener;
...

@Entity
@Table(name="bookshelf")
@EntityListeners(SpringEntityListener.class)
public class BookshelfEntity implements Bookshelf {

...


private String category;

@Autowired transient BookRepository bookRepository;
@Autowired transient BookshelfSpaceRepository bookshelfSpaceRepository;

de.ck35.example.ddd.jpa.SpringEntityListener 目的在 Javadoc 中描述:

/**
* Entity listener which allows dependency injection inside entities.
* The listener can be registered via {@link EntityListeners} annotation.
*
* Dependency injection annotations like {@link Autowired} are supported.
*
* @author Christian Kaspari
* @since 1.0.0
*/
public class SpringEntityListener {

...

@PostLoad
@PostPersist
public void inject(Object object) {
AutowireCapableBeanFactory beanFactory = get().getBeanFactory();
if(beanFactory == null) {
LOG.warn("Bean Factory not set! Depdendencies will not be injected into: '{}'", object);
return;
}
LOG.debug("Injecting dependencies into entity: '{}'.", object);
beanFactory.autowireBean(object);
}

还有配置可以启用嵌套在类(在本例中为实体)中的存储库定义:

@Configuration
@EnableJpaRepositories(basePackages="de.ck35.example.ddd.jpa", considerNestedRepositories=true)
@ComponentScan("de.ck35.example.ddd.jpa")
public class JpaConfiguration {

感谢Christian Kaspari谁是此存储库的作者。

关于java - 如何从 Spring Boot 中的实体访问存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46092710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com