2014-01-11 3 views
6

в моем проекте модели (он имеет только постоянные классы, aka java beans) У меня есть класс, который имеет составной первичный ключ. Чтобы сопоставить это, я использовал два @Id в своем классе. До спящего режима 4 это было невозможно, но теперь все в порядке. Итак, проблема в том, что eclipse показывает ошибку в этом классе, говоря, что это нужно делать по-старому. Как это:Ошибка Eclipse при использовании нескольких @Id для составных первичных ключей

False error

Как я сказал, это ложная ошибка, потому что код работает отлично, если я выполнить его. У меня есть плагин JBoss Tools, установленный на eclipse, но я не знаю, вызваны ли ошибки его или eclipse.

Кто-нибудь знает, как решить эту проблему? Не то, чтобы это мешало мне выполнять приложение, но это раздражает, когда ошибка всегда отображается.

--- EDIT ---

Итак, теперь я знаю, что проблема находится на JBoss Tools, потому что я выключил грань JPA по проекту и ошибки прекратились. Но я хотел бы использовать возможности, которые предоставляет JBoss Tools, поэтому ... пока нет решения.

+0

Я не знал, что это возможно в Hibernate 4 :) Нашел вопрос. Я собирался предложить EmbeddedId с классом Embeddable. – Hrishikesh

+0

JPA Facet не входит в JBoss Tools, он поставляется с проектом Eclips Daly, который, в свою очередь, является частью проекта Webtools. JBoss Tools основан на Webtools. Вы можете задавать такие вопросы на форуме пользователей JBoss Tools здесь - https://community.jboss.org/en/tools. – dgolovin

+0

, так что вам нужно IdClass, согласно спецификации JPA, тогда –

ответ

18

Ну, это почти год спустя, но сегодня я сам столкнулся с этой проблемой :-)

Вы можете отключить эту ошибку в Eclipse. Перейти к

Настройки-> Java Persistence-> JPA-> Ошибки/предупреждения

Под тип раздела найдите категорию «ID класса должны быть использованы, когда несколько отображений ID определено.» и измените его с Error на Ignore (или на любую серьезность, которую вы хотите дать).

+1

Спасибо, я больше не использую eclipse, переключившись на лучшую среду IDE. Но я думаю, что ваш ответ поможет другим людям. –

+0

Хорошее объяснение. Хотя на MAC STS он не решает проблему. –

+0

Спасибо. Это также помогло в нашем проекте, который использует EclipseLink вместо Hibernate. –

-1

хорошо, если у вас есть составной ключ и должен также иметь Композиционный ключ класс

что-то переведенное как это:

@Entity 
@IdClass(PK_BP.class) 
@Table(name="BP_BIS") 
public class BP_BIS implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @Id 
    private String BP_MODE; 
    @Id 
    private String BP_BD; 

ключ класс композита будет выглядеть следующим образом:

public class PK_BP implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    private String BP_MODE; 
    private String BP_BD; 

    public PK_BP() 
    {} 

    public PK_BP(String bP_MODE, String bP_BD) { 
     this.BP_MODE = bP_MODE; 
     this.BP_BD = bP_BD; 
    } 

} 
+0

Op специально попросил новый способ без сложного ключа. –

Смежные вопросы