2016-06-13 3 views
0

Я делаю приложение, у которого есть это отношение: персональный контакт имеет электронную почту.Атрибут [] отсутствует в управляемом типе

Так я пытаюсь найти сообщения электронной почты из личных контактов, и я делаю этот запрос, используя критерии, но всегда возвращают 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(); 
} 

личный контакт, как внешний ключ.

И вот мой Email класс:

@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; 

и вот мой личный контакт класс:

@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; 

И каждый раз, когда я выполнить запрос это возвращение:

Исключение в потоке «AWT-EventQueue-0» java.lang.IllegalArgumentException: атрибут [personalContact] равеннет в управляемом типа [EntityTypeImpl @ 1230307250: Email [ javaType: класс csheets.ext.crm.contact.Email дескриптора: RelationalDescriptor (csheets.ext.crm.contact.Email -> [DatabaseTable (электронная почта) ]), отображения: 5]].

Я сделал поиск, а остальные программисты сказали, что проблема связана с именем переменных ... но я думаю, что имена переменных верны.

Так что я делаю неправильно? возможно, связь между этими двумя классами?

Спасибо!

+0

Как вы сохраняете 'private List secondaryMail;'? Вы не можете сохранить список в одной строке. Вам не хватает другой таблицы? –

ответ

1

Если вы внимательно прочитали сообщение об исключении, вы обнаружите, что он жалуется, что класс Email не имеет свойства (атрибута), которое называется personalContact, и, действительно, такого свойства нет. Предположительно, вы имели в виду свойство pContact?

(Ошибки, подобные этому, я рекомендую запросить JPA через Querydsl: завершение кода, вероятно, предотвратило бы эту ошибку, и даже если нет, вы получили бы ясное сообщение компилятора при попытке использовать несуществующее свойство)

+0

Это была моя ошибка, спасибо .. Я думал, что все правильно ... Извините за этот глупый вопрос! И еще раз спасибо за ваш ответ! – Joseph