标签: spring-data-jpa

使用@ComponentScan时,Spring引导在sibling-package中找不到JpaRepositories,或者在使用@EnableJpaRepositories时无法初始化它们

我有一个由多个模块组成的maven项目.其中三个模块是

  • "project-core"(包含模型类)
  • "project-data"(包含Spring Data JPA存储库)
  • "project-spring"(包含带有REST控制器的主Spring Boot App).

在启动时,我得到以下异常:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.foo.bar.data.OrderRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
Run Code Online (Sandbox Code Playgroud)

我知道Spring Boot Applications默认只查看他们自己和他们的子包bean,但在这种情况下,bean是在兄弟包中.我已经尝试过@ComponentScan({"org.foo.bar.data"})在Application类中添加一个,但无济于事.

使用@EnableJpaRepositories(basePackages = {"org.foo.bar.data"})投掷

Caused by: java.lang.IllegalArgumentException: Not an managed type: class org.foo.bar.core.model.Order
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

目录树(修剪)如下所示:

project
??? project-core
?   ??? src
?       ??? main
?           ??? java
?               ??? org
?                   ??? foo
?                       ??? bar
? …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data-jpa spring-boot

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

如何在springrepository的spring boot中使用findAll方法

我的UserRepository:

public interface UserRepository extends CrudRepository<User, Integer> {
    List<User> findAll(List<Integer> ids);
}
Run Code Online (Sandbox Code Playgroud)

错误:

引起:org.springframework.data.mapping.PropertyReferenceException:找不到类型User的属性findAll

请参阅- http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html?is-external=true#findAll-java.lang.Iterable-

有人可以告诉我如何获取User基于Id 列表的对象列表.

这很有效

@Query(" select new User(id,x,y,z) from User b where b.id in ?1 ")
List<User> findById(List<Integer> id);
Run Code Online (Sandbox Code Playgroud)

java spring spring-data-jpa spring-boot

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

Spring存储库查询返回以day作为键的映射

如果实体包含名为"workDay"的列,我如何进行查询以获取映射中键为"workDay"的所有条目并为实体列表赋值.欢迎任何兴趣.谢谢.

jpa spring-data-jpa spring-repositories

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

如何使用Spring Data JPA将列的旧值和新值保存到Audit表中

我正在使用Spring Boot,使用Spring Data JPAMS Sql server2014数据库来保存和更新实体(javax.persistence)到表中的过程.

根据要求,我们需要审核所有表的每一列.所以我用相应的列创建了新表作为"Audit".但我不知道如何保存旧的和新的值和其他列.

春天是否有任何单独的api来支持这种功能?

create table Audit
(
  Id INT NOT NULL PRIMARY KEY,
  TableName VARCHAR (100)
  ColumnName VARCHAR (100)
  RowId INT,
  OldValue VARCHAR (100),
  NewValue VARCHAR (100),
  Type VARCHAR (100),
  ChangedDate DATETIME,
  ChangedBy VARCHAR (100),
);
Run Code Online (Sandbox Code Playgroud)

其中"类型"表示DML操作的类型,"旧值和新值"列保存父表中列的前一个和现有值.

我是否可以了解审核实体的最佳方法,即将旧值和新值以及其他相关字段保存并更新到Audit表中.

java spring hibernate jpa spring-data-jpa

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

无法为方法public abstract java.util.Optional创建查询元模型

在尝试使用库版本后,我陷入了困境。一个类似的问题似乎并不适用,因为它是三岁和我使用的东西太多新版本,它的抱怨Optional<>。我的Gradle文件:https : //github.com/JetForMe/spring-hoa/blob/master/build.gradle? ts =4

public
interface
UserRepository
    extends JpaRepository<User, Long>
{
    Optional<User>              findByLogin(String inLogin);
}
Run Code Online (Sandbox Code Playgroud)

对于实体

@Entity public class User
{
    public
    User(String inLogin, String inClearPassword)
    {
        mLogin = inLogin;
        mEncryptedPassword = inClearPassword;       //  TODO
    }

    public  Long            getId()                     { return mId; }
    public  String          getLogin()                  { return mLogin; }

    @Id
    @GeneratedValue
    private Long                    mId;

    @JsonIgnore
    public String                   mEncryptedPassword;
    public String                   mLogin;
}
Run Code Online (Sandbox Code Playgroud)

完整日志:

$ gradle bootRun
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate gradle spring-data-jpa

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

为什么我在Spring Data JPA本机SQL查询中获取此异常?IllegalArgumentException:具有该位置[2]的参数不存在

我不是这样的Spring Data JPA(使用Hibernate 4.3.11.Final),我有以下情况.

我有这个SQL查询(直接执行MySql工作正常),查询只是找到注册到住宿表中的所有酒店,从选定的点到特定范围:

SET @fiumicino = GeomFromText('POINT(41.768835 12.247658)'); 

SELECT *
FROM accomodation a
WHERE earth_circle_distance(@fiumicino, a.geographical_position) < 7
Run Code Online (Sandbox Code Playgroud)

因此,您可以在previus代码中看到此查询有2个参数:

  • @fiumicino:这是一个MySqk Spatial POINT对象.
  • 7:这只是一个范围.

好的,它工作正常......

所以我试着将它转换为我的Spring Data JPA存储库接口的本机SQL查询,我做了:

@Repository
public interface AccomodationDAO extends JpaRepository<Accomodation, Long> {

    @Query(value = "SELECT * FROM accomodation a WHERE earth_circle_distance(?0, a.geographical_position) < ?1", nativeQuery = true)
    Accomodation findByRange(Point location, int range);

}
Run Code Online (Sandbox Code Playgroud)

基本上我用@ 0参数取代@fiumicino,用?1取代距离范围的7值. …

java spring hibernate spring-data spring-data-jpa

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

在Spring中实现JpaRepostiory时使用存储库注释

我不确定我是否理解正确,所以要澄清一下.如果我想为我的实体创建一个存储库,例如:

public interface BookRepository extends JpaRepository<Book, Id> {}
Run Code Online (Sandbox Code Playgroud)

我应该用@Repository注释它吗?根据这个问题, @ Repository注释将SQL中的异常转换为持久性,但JpaRepostiory是否已经这样做了?什么是最佳实践 - 注释与否?

java spring annotations spring-data-jpa

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

Spring JPA只返回字段,而不返回实体

我有一个Query-annotated Spring JPA repo,它看起来像这样:

@Repository
public interface MainRepository 
extends 
    JpaRepository<MainEntity, MainEntity.ID>, 
    JpaSpecificationExecutor<MainEntity> {

    @Query("select e.start, e.finish,e.forename,e.surname from MainEntity e where e.volunteerId= :id "
        + "and e.areaId>0 and e.isAssignment=true order by e.start")
    List<MainEntity> findAssignments(@Param("id") int volunteerId);
}
Run Code Online (Sandbox Code Playgroud)

但是,尽管返回类型,但不会返回MainEntity对象列表.它返回与所请求的字段类型对应的List of Object [].

这是怎么回事???

java spring jpql spring-data-jpa

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

java.lang.IllegalArgumentException:修改查询只能使用void或int/Integer作为返回类型!同时尝试在JpaRepository中使用@Query

我需要更新mysql表中的字符串值.为此,我写了一个方法如下.

@Repository
public interface NotificationRepository extends JpaRepository<Notification, Long> {

    @Modifying
    @Query("update Notification msg set msg.message = ?1 where msg.applicationUser.id = ?2")
    String createNewNotification(String message, Long id);

}
Run Code Online (Sandbox Code Playgroud)

我得到以下例外.

java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type!
Run Code Online (Sandbox Code Playgroud)

我无法更新表格中的字符串值.只有void或int是可能的吗?这是什么意思?我该如何处理此异常?请帮忙.

java mysql spring hibernate spring-data-jpa

0
推荐指数
2
解决办法
3444
查看次数

Spring数据jpa - 返回对象的最佳方法?

我有这样的对象:

@Entity
public class DocumentationRecord {
    @Id
    @GeneratedValue
    private long id;

    private String topic;
    private boolean isParent;
    @OneToMany
    private List<DocumentationRecord> children;
...
}
Run Code Online (Sandbox Code Playgroud)

现在我想只获得主题和ID.有没有办法得到这样的格式:

[
{
id: 4234234,
topic: "fsdfsdf"
},...
]
Run Code Online (Sandbox Code Playgroud)

因为即使只使用此查询

public interface DocumentationRecordRepository extends CrudRepository<DocumentationRecord, Long> {

    @Query("SELECT d.topic as topic, d.id as id FROM DocumentationRecord d")
    List<DocumentationRecord> getAllTopics();
}
Run Code Online (Sandbox Code Playgroud)

我只能得到这样的记录:

[
  [
    "youngChild topic",
    317
  ],
  [
    "oldChild topic",
    318
  ],
  [
    "child topic",
    319
  ],
]
Run Code Online (Sandbox Code Playgroud)

我不喜欢数组数组我想获得具有属性id和主题的对象数组.实现这一目标最好的方法是什么?

spring hibernate jpa jpql spring-data-jpa

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