我使用 Oracle 数据库和一些 JPA 查询创建了一个非常小且简单的 Spring Boot 应用程序。
这是不返回数据的代码片段,该数据实际上存在于数据库中。
letterRecipientNonOas = letterRecipientNonOasRepository
.findById(Long.valueOf(letterRecipientDTO.getNonOas().getId()))
.orElseThrow(() -> new EntityNotFoundException(LetterRecipientNonOas.class,
Constant.MESSAGE_ENTITY_NOT_FOUND));
此处 findById 返回空结果集。
这是我的存储库
package com.care.document.repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import com.care.document.model.LetterRecipientNonOas;
/**
* The Interface LetterRecipientNonOasRepository.
*/
@Repository
public interface LetterRecipientNonOasRepository extends PagingAndSortingRepository<LetterRecipientNonOas, Long> {
Optional<LetterRecipientNonOas> findByLetterId(Long id);
Optional<LetterRecipientNonOas> findByTitleIgnoreCase(String title);
List<LetterRecipientNonOas> findByTitleContainingIgnoreCase(String title);
List<LetterRecipientNonOas> findAllByTitleIgnoreCaseAndIdNot(String title, Long recipientId);
List<LetterRecipientNonOas> findAllByIdAndLetterId(long id, long letterId);
}
这是我的模型类:
package com.care.document.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import org.springframework.lang.Nullable;
import com.care.admin.model.BaseEntity;
import com.care.admin.util.CommonUtil;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "letter_recipient_non_oas")
public class LetterRecipientNonOas extends BaseEntity implements Serializable {
@Id
Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "letter_id")
Letter letter;
Integer recipientType; // Action/Info
//byte recipientSubType; // Internal/External/NonOAS
byte recipientCategory; //Internal/External
int orderNo;
String title;
@Nullable
String remarks;
String address;
@PrePersist
private void prePersist() {
this.id = CommonUtil.generateID(this.atRegion);
}
}
我测试过,尝试过不同的方法,但没有用。
最佳答案
有几种情况可能会让人产生这种印象:
- 您正在查看错误的数据库。
- 当您尝试加载数据时,数据尚未存在,但当您检查时数据已存在。 众所周知,JPA 缓存可以非常有效地创建此类场景。
- 数据看起来与您想象的有些不同。这可能是由不可见或容易错过的内容(例如空格甚至控制字符)引起的。
- 您在创建数据的事务中或使用允许脏读的 session 检查数据库,并且创建数据的插入尚未提交。
关于java - Spring boot JPA不使用findById返回现有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60189890/