2016-11-26 7 views
2

У меня есть одна таблица адвокатов, которая имеет идентификатор (int) в качестве первичного ключа и таблицу Country, имеющую country_code (String) в качестве первичного ключа. Я хочу создать третью таблицу, используя аннотацию @JoinTable в спящем режиме с двумя внешними ключами. Но когда я запускаю его, появляется следующая ошибка. Не уверен, как сопоставить одну строку и один int как внешние ключи в третьей таблице.Нелегальная попытка сопоставить не коллекцию как @OneToMany, @ManyToMany или @CollectionOfElements

Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: com.test.common.entities.Country.lawyer 

Это мой код

@Entity 
@Table(name = "lawyer") 
public class Lawyer { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "lawyer_batch_no") 
    private int lawyerbatchNo; 

@ManyToOne(targetEntity = Country.class, cascade = { CascadeType.ALL }) 
    @JoinTable(name = "lawyer_cscd", joinColumns = { 
      @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") }, inverseJoinColumns = { 
        @JoinColumn(name = "country_code", referencedColumnName = "country_code") }) 
    private Country country; 

getter setter... 
} 

@Entity 
@Table(name = "country") 
public class Country { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "country_code") 
    protected String country_code; 

    @Column(name = "abbreviation") 
    protected String abbreviation; 

    @Column(name = "name", nullable = false) 
    protected String name; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "country") 
    protected Set<State> state = new HashSet<State>(); 

    @OneToMany(targetEntity = Lawyer.class, cascade = { CascadeType.ALL }, orphanRemoval = true) 
    @JoinTable(name = "lawyer_cscd", joinColumns = { 
      @JoinColumn(name = "country_code", referencedColumnName = "country_code") }, inverseJoinColumns = { 
        @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") }) 
    private Lawyer lawyer; 

getter setter.... 
} 
+1

Ошибка указывает, что 'частный адвокат адвокат,' должен быть коллекция, как это oneToMany отношения – baao

+0

@baao спасибо за указание, что это глупая ошибка с моей стороны, благодаря за помощь – henrycharles

ответ

3

Ошибка указывает на то, что private Lawyer lawyer должна быть коллекция, как это @OneToMany отношения. В Country классе, последнее соотношение должно быть

@OneToMany(targetEntity = Lawyer.class, cascade = { CascadeType.ALL }, orphanRemoval = true) 
@JoinTable(name = "lawyer_cscd", joinColumns = { 
    @JoinColumn(name = "country_code", referencedColumnName = "country_code") }, inverseJoinColumns = { 
    @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") }) 
private Set<Lawyer> lawyer; 
// or a Collection/List/etc. 
+0

У меня есть еще один вопрос: http://stackoverflow.com/questions/40829022/field-district-code-doesnt-have-a-default-value?noredirect1_comment68876061_40829022 Я получаю сообщение об ошибке. это и дайте мне знать – henrycharles