我有一个springBoot 2.1.9.RELEASE应用程序,该应用程序将Spring Data用于Couchbase
我有这个对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hostel<T> {
@NotNull
@JsonProperty("_location")
private T location;
}
和另外一个
@Document
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(of = { "id" })
@Builder
public class HTMDoc {
@Id
private String id;
@NotNull
@Field
private Hostel hostel;
}
在服务上
public HTMDoc create(@Valid HTMDoc doc) {
return repository.save(doc);
}
在测试中
service.create(new HTMDoc());
但是当我保存时,我得到了这个错误,而不是旅馆字段中的验证NotNull
org.springframework.data.mapping.MappingException: An ID property is needed, but not found/could not be generated on this entity.
答案 0 :(得分:7)
您需要在服务类上使用@org.springframework.validation.annotation.Validated
批注以启用验证。
@Validated
@Service
public class DocService {
public HTMDoc create(@Valid HTMDoc doc) {
return repository.save(doc);
}
}
答案 1 :(得分:2)
在ID上添加以下注释,然后尝试一下:
@Id
@GeneratedValue(strategy = GenerationStrategy.UNIQUE)
private String id;
有关@GeneratedValue
批注的更多信息,可以在以下很好的答案中找到:Spring GeneratedValue annotation usage
答案 2 :(得分:0)
将注释放在吸气剂上。
私有字段中可能不支持该验证。
答案 3 :(得分:0)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Hostel<T> {
@Id
private Long id;
@NotNull
@JsonProperty("_location")
private T location;
}
在模型类中,在任何属性上都必须使用@Id。
答案 4 :(得分:0)
请在您的id字段中添加以下语法
// UserListItem.vue
<template>
<span class="userListContent">
<a :href="'/profile/'+user.id" target="blank">{{user.name}}</a>
<i @click="showPlusIcon = !showPlusIcon" class="far" :class="iconId"></i>
<input type="checkbox" />
</span>
</template>
<script>
export default {
props: {
user: {
type: Object,
required: true
}
},
data () {
return {
showPlusIcon: true
}
},
computed: {
iconId () {
return this.showPlusIcon ? 'fa-plus' : 'fa-check-circle'
}
}
}
</script>
答案 5 :(得分:0)
您需要在类中使用@Validated批注,以通知Spring Boot这些类应通过javax验证进行验证。
@Validated
@Component
public class Phone {
//Your logic
}