使用Hibernate,JPA,Wildfly 11和EJB,JTA。我的数据库是Mysql,并通过@PersistenceContext注入entityManager。
我试图从数据库中检索一条记录,但该记录存在于db中,并且在我的实体中其类型为Long而在db中为BigInt(20)。
entityManager.find(peristenceClass.class, 1L)
返回空值,而与相同的查询:
entityManager.createQuery(select a from Entity a where a.id = 1).getResultList()
返回实体。
使用createQuery(...)方法检索它之后,find()方法也将其返回!
这是我的实体类定义:
@Entity
@Table(name = "answersheet")
public class AnswerSheet implements DomainEntity {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "date", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date date;
@Column(name = "name")
private String name;
@Column(name = "national_code")
private String nationalCode;
@Column(name = "mobile")
private String mobile;
@Column(name = "client_ip", nullable = false)
private String clientIp;
@Column(name = "satisfaction")
private Integer satisfaction;
@JoinColumn(name = "questionnaire", referencedColumnName = "id", nullable = false)
@ManyToOne
private Questionnaire questionnaire;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNationalCode() {
return nationalCode;
}
public void setNationalCode(String nationalCode) {
this.nationalCode = nationalCode;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
public Integer getSatisfaction() {
return satisfaction;
}
public void setSatisfaction(Integer satisfaction) {
this.satisfaction = satisfaction;
}
public Questionnaire getQuestionnaire() {
return questionnaire;
}
public void setQuestionnaire(Questionnaire questionnaire) {
this.questionnaire = questionnaire;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof AnswerSheet)) return false;
AnswerSheet that = (AnswerSheet) o;
return getId() != null ? getId().equals(that.getId()) : that.getId() == null;
}
@Override
public int hashCode() {
return getId() != null ? getId().hashCode() : 0;
}
@Override
public String toString() {
return "AnswerSheet{" +
"id=" + id +
'}';
}