突然发现hql的where条件中的字段可以写为实体的属性名称也可以写数据库中对应表的字段名,以前没遇到过,突然间遇到有点意外,所以就写出来,好让自己记住。
一个用户实体对应的用户表,他们的映射我采用JPA的标注方式:
@Entity
@Proxy(lazy = true)
@Table(name = "t_yh")
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Transactional
public class TYh implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
// Fields
private Integer yhId; // PRIMARY
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "identifier")
@SequenceGenerator(name = "identifier", allocationSize = 1)
@Column(name = "yh_id", unique = true, nullable = false, insertable = true, updatable = true)
public Integer getYhId() {
return yhId;
}
}
属性yhId对应试数据库中的yh_id.
在做查询时如:from TYh model where yhId=12 和from TYh model where yh_id=12 ;他们查询出来的结果是一样。但是如果这样写就不行:from TYh model where model.yh_id=12 .
有了别名之后他按照的是TYh这个实体类中的属性去查询了,而实体类中没有yh_id字段。就会报如下错误:
could not resolve property: yh_id of: com.strong.module.tyh.jpa.TYh [ from com.strong.module.tyh.jpa.TYh model where model.yh_id=12]。