我正在做一个具有这种关系的应用程序:一个个人联系人有一封电子邮件。
因此,我试图从个人联系人中查找电子邮件,并且使用Criteria进行此查询,但始终返回IllegalArgumentException:
@Override
public Email findByEmail(PersonalContact personalContact) {
CriteriaBuilder criteriaBuilder = entityManager().getCriteriaBuilder();
CriteriaQuery<Email> criteriaQuery = criteriaBuilder.createQuery(Email.class);
Root<Email> email = criteriaQuery.from(Email.class);
criteriaQuery.where(criteriaBuilder.equal(
email.get("personalContact"), criteriaBuilder.parameter(PersonalContact.class, "personalContact")));
TypedQuery<Email> typedQuery = entityManager().createQuery(criteriaQuery);
typedQuery.setParameter("personalContact", personalContact);
return typedQuery.getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)
个人联系就像一个外键。
这是我的电子邮件课程:
@Entity
@Table(name = "Email")
public class Email implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String mainEmail;
private List<String> secondaryMail;
@JoinColumn(name = "personal")
@OneToOne(fetch = FetchType.LAZY)
private PersonalContact pContact;
Run Code Online (Sandbox Code Playgroud)
这是我的个人联系人课程:
@Entity
@Table(name = "PERSONALCONTACT")
public class PersonalContact extends Contact implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "PERSONAL_ID")
private Long id;
//Other variables
@OneToOne(fetch=FetchType.LAZY, mappedBy="personal")
private Email email;
Run Code Online (Sandbox Code Playgroud)
每次执行查询时,都会返回:
线程“ AWT-EventQueue-0”中的异常java.lang.IllegalArgumentException:托管类型[EntityTypeImpl @ 1230307250:Email [javaType:类csheets.ext.crm.contact.Email描述符:RelationalDescriptor]中没有属性[personalContact] (csheets.ext.crm.contact.Email-> [DatabaseTable(Email)]),映射:5]。
我做了一些搜索,其他程序员说问题出在变量名上……但是我想变量名是正确的。
所以我做错了什么?也许那两个阶级之间的关系?
谢谢!
| 归档时间: |
|
| 查看次数: |
2836 次 |
| 最近记录: |