我有一个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)
答案 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));