我有一个由多个模块组成的maven项目.其中三个模块是
在启动时,我得到以下异常:
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) 我的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
有人可以告诉我如何获取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) 如果实体包含名为"workDay"的列,我如何进行查询以获取映射中键为"workDay"的所有条目并为实体列表赋值.欢迎任何兴趣.谢谢.
我正在使用Spring Boot,使用Spring Data JPA和MS 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表中.
在尝试使用库版本后,我陷入了困境。一个类似的问题似乎并不适用,因为它是三岁和我使用的东西太多新版本,它的抱怨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) 我不是这样的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个参数:
好的,它工作正常......
所以我试着将它转换为我的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值. …
我不确定我是否理解正确,所以要澄清一下.如果我想为我的实体创建一个存储库,例如:
public interface BookRepository extends JpaRepository<Book, Id> {}
Run Code Online (Sandbox Code Playgroud)
我应该用@Repository注释它吗?根据这个问题, @ Repository注释将SQL中的异常转换为持久性,但JpaRepostiory是否已经这样做了?什么是最佳实践 - 注释与否?
我有一个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 [].
这是怎么回事???
我需要更新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是可能的吗?这是什么意思?我该如何处理此异常?请帮忙.
我有这样的对象:
@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-data-jpa ×10
spring ×9
java ×8
hibernate ×5
jpa ×3
jpql ×2
spring-boot ×2
annotations ×1
gradle ×1
mysql ×1
spring-data ×1