【发布时间】:2019-03-31 01:35:17
【问题描述】:
我想使用实体管理器 createquery 函数在我的数据库中搜索请求的值。每当我执行我的方法时,都会收到以下错误消息:
llegalArgumentException:您尝试为参数 searchvalue 设置类型为 java.lang.String 的值,查询字符串中的预期类型为 int
上面说需要一个int值,但我认为每个like表达式都需要一个字符串值?
实体:
public class Contract implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Column(name = "number")
private int number;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "type")
private String type;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "description")
private String description;
@Basic(optional = false)
@NotNull
@Column(name = "start_date")
@Temporal(TemporalType.DATE)
private Date startDate;
@Basic(optional = false)
@NotNull
@Column(name = "minimum_term")
private int minimumTerm;
@NotNull
@Column(name = "cancellation_period")
private int cancelTime;
@Basic(optional = false)
@NotNull
@Column(name = "status")
private int status;
@JoinColumn(name = "user_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Users userId;
@JoinColumn(name = "supplier_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Supplier supplierId;
[...]
}
查询字符串:
List mylist = em.createQuery("SELECT c FROM Contract c WHERE c.userId = :userid AND (c.number LIKE :search OR c.type LIKE :search OR c.description LIKE :search OR c.startDate LIKE :search OR c.supplierId.name LIKE :search OR c.cancelTime LIKE :search OR c.minimumTerm LIKE :search)", Contract.class)
.setParameter("userid", user).setParameter("search", "%"+search+"%")
.getResultList()
提前致谢! :)
【问题讨论】:
标签: java expression jpql sql-like