我有一个实体传感器。我如何通过所有字段(包括类型和单位)进行搜索,因为现在我只通过(ID,名称,型号,...,位置,描述)得到结果。我使用Spring Data Jpa
@Query("SELECT s " +
"FROM Sensor s " +
"WHERE CONCAT(s.name, s.model, s.rangeFrom, s.rangeTo, s.location, s.description,
s.type, s.unit) " +
"LIKE %:text%")
List<Sensor> findAllSensorsByText(@Param("text") String text);
传感器类别
@Entity
@Table(name = "sensors")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Sensor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "sensor_id")
private Integer id;
private String name;
private String model;
@Column(name = "range_from")
private Integer rangeFrom;
@Column(name = "range_to")
private Integer rangeTo;
private String location;
private String description;
@ManyToOne
@JoinColumn(name = "type_id")
private Type type;
@ManyToOne
@JoinColumn(name = "unit_id")
private Unit unit;
}
类型类别
@Entity
@Table(name = "types")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Type {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "type_id")
private Integer id;
private String type;
}
单位类别
@Entity
@Table(name = "units")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Unit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "unit_id")
private Integer id;
private String unit;
}
2条答案
按热度按时间nkkqxpd91#
首先,你不应该只是连接字段。如果一个字段包含
"abc"
,下一个包含"def"
,你实际上会找到"bcde"
的匹配,尽管你不应该这样做。请改为使用
or
。对于
Type
和Unit
,您可以使用JPQL简单地导航关系:根据您的具体要求,在某些情况下,您可以切换到
=
而不是LIKE
,这样就可以使用索引。wvmv3b1j2#
您可以尝试在
CONCAT
语句中使用s.*
来获取所有字段,但它仅适用于本机查询。