我试图在一个小型独立应用程序中一起使用spring数据和spring配置.
...
public static void main( String[] args )
{
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
...
}
Run Code Online (Sandbox Code Playgroud)
1.我的问题是如何在不使用的情况下发现spring数据存储库
<jpa:repositories base-package="foo.repositories" />
Run Code Online (Sandbox Code Playgroud)
通过spring config?
2.如果没有,我可以以某种方式一起使用'ClassPathXmlApplicationContext'和'AnnotationConfigApplicationContext'吗?
我正在开发一个基于Spring的项目(迄今为止)完全没有XML,除了现在我已经使用Spring JPA存储库populator打了一个墙:
<repository:jackson-populator location="classpath:data.json" />
Run Code Online (Sandbox Code Playgroud)
如何在java @Configuration类中表达上述内容?
这篇文章建议直接使用FactoryBean:https://stackoverflow.com/a/13566712/1746274
我试过了,我得到的最接近的是以下但是不太正确.
@Bean(name="repositoryPopulator")
public RepositoryPopulator getRespositoryPopulator() throws Exception {
final JacksonRepositoryPopulatorFactoryBean factory = new JacksonRepositoryPopulatorFactoryBean();
factory.getObject().setResourceLocation("classpath:test-data.json");
factory.afterPropertiesSet();
return factory.getObject();
}
Run Code Online (Sandbox Code Playgroud)
以上结果FactoryBeanNotInitializedException与消息有关JacksonRepositoryPopulatorFactoryBean does not support circular references.
有任何想法吗?
我们在应用程序中使用Hibernate/JPA,Spring,Spring Data和Spring Security.我有一个User使用JPA映射的标准实体.而且,我有一个UserRepository
public interface UserRepository extends CrudRepository<User, Long> {
List<User> findByUsername(String username);
}
Run Code Online (Sandbox Code Playgroud)
它遵循Spring Data约定来命名查询方法.我有一个实体
@Entity
public class Foo extends AbstractAuditable<User, Long> {
private String name;
}
Run Code Online (Sandbox Code Playgroud)
我想使用Spring Data审计支持.(如此处所述.)因此我创建了AuditorService如下:
@Service
public class AuditorService implements AuditorAware<User> {
private UserRepository userRepository;
@Override
public User getCurrentAuditor() {
String username = SecurityContextHolder.getContext().getAuthentication().getName();
List<User> users = userRepository.findByUsername(username);
if (users.size() > 0) {
return users.get(0);
} else {
throw new IllegalArgumentException();
}
}
@Autowired
public void setUserService(UserService userService) …Run Code Online (Sandbox Code Playgroud) 我的组合是Spring Boot + Spring Data Jpa + Multiple Databases.我在启动应用程序时遇到NullPointer异常.像SPring Data with Boot这样的感觉无法生成JPA元数据.我没有得到任何与此错误相关的资源.
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:736)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.verient.infinipay.staticcard.Application.main(Application.java:25)
... 6 more
Caused by: java.lang.NullPointerException
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.getMetamodels(JpaMetamodelMappingContextFactoryBean.java:90)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:56)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:26)
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) …Run Code Online (Sandbox Code Playgroud)什么是典型的用例代码,显示这两个注释之间的区别 - 意味着@RestController和@RepositoryRestController- ?
spring-mvc spring-data spring-data-rest spring-restcontroller
我正在使用Spring Boot实现Rest API.由于我的实体类来自另一个包的包,我必须使用注释指定它EntityScan.此外,我曾经EnableJpaRepositories指定了定义JPA存储库的包.这是我的项目的样子:
//Application.java
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EntityScan("org.mdacc.rists.cghub.model")
@EnableJpaRepositories("org.mdacc.rists.cghub.ws.repository")
Run Code Online (Sandbox Code Playgroud)
在我的控制器类中,我有一个自动装配的SeqService对象.
//SeqController.java
@Autowired private SeqService seqService;
@RequestMapping(value = "/api/seqs", method = GET, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<List<SeqTb>> getSeqs() {
List<SeqTb> seqs = seqService.findAll();
return new ResponseEntity<List<SeqTb>>(seqs, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
SeqService是一个接口,我从中创建了一个Bean类SeqServiceBean.在SeqServiceBeanI中自动安装了JPA存储库:
// SeqServiceBean.java
@Autowired private SeqRepository seqRepository;
@Override
public List<SeqTb> findAll() {
List<SeqTb> seqs = seqRepository.findAll();
return seqs;
}
//SeqRepository.java
@Repository
public interface SeqRepository extends JpaRepository<SeqTb, Integer> {
@Override
public List<SeqTb> findAll();
public SeqTb …Run Code Online (Sandbox Code Playgroud) 我有两个JPA实体,一个带有SDR导出的存储库,另一个带有Spring MVC控制器,还有一个非导出的存储库.
MVC公开实体具有对SDR管理实体的引用.请参阅下面的代码参考.
User从中检索a时,问题就出现了UserController.SDR管理的实体不会序列化,而且似乎Spring可能正在尝试在响应中使用HATEOAS引用.
这是GET一个完全填充的User外观:
{
"username": "foo@gmail.com",
"enabled": true,
"roles": [
{
"role": "ROLE_USER",
"content": [],
"links": [] // why the content and links?
}
// no places?
]
}
Run Code Online (Sandbox Code Playgroud)
如何User通过嵌入式SDR管理实体从Controller中清楚地返回实体?
Spring MVC管理
实体
@Entity
@Table(name = "users")
public class User implements Serializable {
// UID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private Long id;
@Column(unique = true)
@NotNull
private String username;
@Column(name = "password_hash")
@JsonIgnore
@NotNull
private String passwordHash;
@NotNull …Run Code Online (Sandbox Code Playgroud) 我正在尝试转换这个原始的SQL查询:
select product.* from following_relationship
join product on following_relationship.following=product.owner_id
where following_relationship.owner=input
Run Code Online (Sandbox Code Playgroud)
进入Spring Data规范,我认为到目前为止我的问题是加入这些表.
这是我目前在规范中的转换:
protected Specification<Product> test(final User user){
return new Specification<Product>() {
@Override
public Predicate toPredicate(Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Join<FollowingRelationship,Product> pfJoin = query.from(FollowingRelationship.class).join("following");
pfJoin.on(cb.equal(pfJoin.get("following"),"owner"));
return query.where(cb.equal(pfJoin.get("following"),user)).getGroupRestriction();
}
};
}
Run Code Online (Sandbox Code Playgroud)
我得到了这个例外:
Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessA
piUsageException: org.hibernate.hql.internal.ast.InvalidWithClauseException: with clause can only reference columns in the driving table
Run Code Online (Sandbox Code Playgroud)
我想补充一点,我是Spring框架的新手,例如这是我春天的第一个应用程序,所以我为新手问题道歉;)
编辑:添加的实体Product,FollowingRelationShip
Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "json_id_prop")
public class FollowingRelationship extends BaseEntity {
@ManyToOne(fetch = …Run Code Online (Sandbox Code Playgroud) 我希望在单页中获得所有结果,我已尝试过
Pageable p = new PageRequest(1, Integer.MAX_VALUE);
return customerRepository.findAll(p);
Run Code Online (Sandbox Code Playgroud)
以上是行不通的,有没有办法实现这个?似乎无法通过此处询问的自定义查询实现.
我使用Spring Boot 2和Spring Data,Spring-Data-Elastisearch和Spring-data-Redis(用于http会话).当我启动应用程序.我收到了
2017-10-29 17:38:33.376 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-10-29 17:38:33.451 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-10-29 17:38:33.461 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-10-29 17:38:33.768 INFO 18625 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode! …Run Code Online (Sandbox Code Playgroud) spring-data spring-data-jpa spring-data-redis spring-boot spring-data-elasticsearch