托管类型中不存在属性[]

Jos*_*eph 0 jpa

我正在做一个具有这种关系的应用程序:一个个人联系人有一封电子邮件。

因此,我试图从个人联系人中查找电子邮件,并且使用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]。

我做了一些搜索,其他程序员说问题出在变量名上……但是我想变量名是正确的。

所以我做错了什么?也许那两个阶级之间的关系?

谢谢!

mer*_*ike 5

如果仔细阅读异常消息,您会发现它在抱怨类Email没有名为的属性(属性)personalContact,实际上,没有这样的属性。想必您是在说pContact房地产?

(这样的错误是为什么我建议通过Querydsl查询JPA的原因:代码完成很可能避免了此错误,即使没有,您在尝试使用不存在的属性时也会得到清晰的编译器消息)