使用输入列表获取实体对象列表:Spring Data JPA-Hibernate

时间:2018-10-26 09:45:39

标签: java spring hibernate spring-boot spring-data-jpa

我有一个APIObjects List<APIObjects> apiObjectList列表作为我的API的输入(通过HTTP-Post),我需要检查数据库中是否存在该对象中的所有参数

DatabaseObject.java

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "my_table")
public class DatabaseObject {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(name = "name")
    String name;

    @Column(name = "group_id")
    String groupId;

    @Column(name = "artifact_id")
    String artifactId;

    @Column(name = "version")
    String version;
 }

APIObject.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class APIObject{
    private String groupId;
    private String artifactId;
    private String version;
}

在我的Repository Interface中,我有这样的方法

List<DatabaseObject> findByGroupIdAndArtifactIdAndVersionIn (List<APIobject> apiList);

但是我得到了这个例外

Caused by: java.lang.IllegalArgumentException: No parameter available for part artifactId SIMPLE_PROPERTY (1): [Is, Equals].

如何为此编写一个Spring-data-JPA方法?所有三个参数都应与(groupid, artifactid and version)

相匹配

2 个答案:

答案 0 :(得分:1)

如果要通过方法名称创建查询,则应更改存储库方法:

List<DatabaseObject> findByGroupIdAndArtifactIdAndVersion(String groupId, String artifactId, String version);

或使用In关键字:

List<DatabaseObject> findByAPIobjectIn(Collection<APIObject> apis)

有关更多详细信息,请参见Query Creation

答案 1 :(得分:0)

尝试使用Query by Example技术。 在您的情况下,解决方案可能如下所示:

DatabaseObject dbObject = new DatabaseObject(apiObject.getGroupId(), ...);
Iterable<DatabaseObject> dbObjects = DatabaseObjectRepository.findAll(Example.of(dbObject));