我有这张桌子:
@Entity
@Table(name = "t_tropical",
uniqueConstraints =
@UniqueConstraint(columnNames = {
"name",
"sign",
"isRetro",
"house",
"lang"}))
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class Tropical {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String sign;
private Boolean isRetro;
private Integer house;
private String lang;
private Date updateDate;
}
这个方法:
@Repository
public interface TropicalRepository extends JpaRepository<Tropical, Long> {
Tropical findByHouseIsAndSignAndIsRetroAndLangIs
(Integer house, String sign, Boolean retro, String lang);
}
但似乎不起作用。我找到了现有的房子/标志/ isRetro 和土地并返回 null
假设数据库中的数据符合规定的条件,您在
TropicalRepository
中编写的查询方法应该能够准确运行。尽管如此,您的查询方法参数名称中存在一个较小的印刷错误。您使用了 retro
而不是 isRetro
。 Java 约定通常对布尔属性使用“is”前缀,因此您的方法应该是:
Tropical findByHouseIsAndSignAndIsRetroAndLang
(Integer house, String sign, Boolean isRetro, String lang);
如果您的查询仍然没有产生预期的结果,您可以检查以下几个因素:
数据对应:确保数据库中的数据与您要检索的条件一致。验证
house
、sign
、isRetro
和 lang
的值是否与您在查询方法中输入的值精确匹配。
数据库配置:验证您的数据库是否已正确配置并链接到您的 Spring Boot 应用程序。
Logging:激活 Spring Data JPA 查询日志记录以查看正在制定和执行的具体 SQL 查询。您可以将以下属性附加到您的
application.properties
或 application.yml
文件中:
logging.level.org.springframework.data.jpa=DEBUG
这将在应用程序日志中显示 SQL 查询,帮助识别任何问题。
命名约定:重新确认
Tropical
实体类中的字段名称。字段名称的字母大小写必须与查询方法中使用的大小写匹配。 Java 区分大小写。
数据类型:确保查询方法中参数的数据类型与实体类中相应字段的数据类型相对应。
NULL 值:如果任何字段(
house
、sign
、isRetro
、lang
)可能为 null
,您可能需要在查询方法中处理此问题。例如,如果 isRetro
是 null
,则查询将不会匹配任何记录。