2015-01-06 3 views
0

Я изучаю сертификацию Spring Core, и я нахожу несколько сообщений о том, как использовать JPA \ Hibernate в упражнении.Как точно обрабатывать аннотацию JPA Hibernate OneToMany?

Поэтому у меня есть 2 таблицы БД с именем respectivelly T_ACCOUNT и T_ACCOUNT_BENEFICIARY.

Эти таблицы имеют следующую структуру:

create table T_ACCOUNT (ID integer identity primary key, NUMBER varchar(9), NAME varchar(50) not null, CREDIT_CARD varchar(16), unique(NUMBER)); 

create table T_ACCOUNT_BENEFICIARY (ID integer identity primary key, ACCOUNT_ID integer, NAME varchar(50), ALLOCATION_PERCENTAGE decimal(5,2) not null, SAVINGS decimal(8,2) not null, unique(ACCOUNT_ID, NAME)); 

И в T_ACCOUNT стол привязан к T_ACCOUNT_BENEFICIARY стол с один ко многим связи, это графическое представление:

enter image description here

И это код счет класса, карта T_ACCOUNT стола:

@Entity 
@Table(name="T_ACCOUNT") 
public class Account { 

    @Id 
    @GeneratedValue 
    @Column(name="id") 
    private Long entityId; 

    @Column(name="NUMBER") 
    private String number; 

    @Column(name="NAME") 
    private String name; 

    @OneToMany 
    @JoinColumn(name="ACCOUNT_ID") 
    private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>(); 

    @Column(name="CREDIT_CARD") 
    private String creditCardNumber; 

    // GETTERS & SETTERS 
} 

Так мое сомнение связанно об этом отображении поля, обрабатывать один ко многие соотношения между T_ACCOUNT и T_ACCOUNT_BENEFICIARY таблицы:

@OneToMany 
@JoinColumn(name="ACCOUNT_ID") 
private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>(); 

Я знаю, что на БД эта взаимосвязь реализована в ACCOUNT_ID поля T_ACCOUNT_BENEFICIARY таблицы (так множественной строка T_ACCOUNT_BENEFICIARY таблиц может иметь такую ​​же величину ACCOUNT_ID поля, и это означает, что одна строка таблицы T_ACCOUNT может быть связана с более один ряд из T_ACCOUNT_BENEFICIARY таблица).

Мои сомнения: в этом отображении поля Я не используя @column аннотацию, потому что объекты Бенефициар (что представляет собой одиночные строки T_ACCOUNT_BENEFICIARY таблицы) не представлены в виде поля (колонки) моего T_ACCOUNT Таблица. Поэтому вместо этого используется @JoinColumn (name = "ACCOUNT_ID").

Но как JPA \ Hibernated знает, что такое правильный стол? Я думаю, что он должен автоматически смотреть, как аннотируется класс Beneficiary.

Правильно ли это интерпретация, как это работает?

Tnx

ответ

0

Вы на правильном пути. Следующее, что вам нужно сделать, - это аннотировать ваш класс получателя с аннотациями @Entity и @Table. И тогда спящий будет понимать, что вы пытаетесь сделать. Вы не разместили свой класс бенефициаров, поэтому я считаю, что это однонаправленные отношения (т. Е. У бенефициара нет аннотации @ManyToOne).В случае, если вы хотите указать двунаправленные отношения в своей модели домена, вам нужно будет разместить аннотацию @ManyToOne с mappedBy в вашем классе бенефициаров, как показано ниже.

@Entity 
@Table("T_ACCOUNT_BENEFICIARY") 
public class Beneficiary { 
@ManyToOne(mappedBy = "beneficiaries") 
Account account; 
... 
} 
Смежные вопросы