Подтвердить что ты не робот

Сопоставьте список строк с аннотациями JPA/Hibernate

Я хочу сделать что-то вроде этого:

    @Entity public class Bar {
        @Id @GeneratedValue long id;
        List<String> Foos
    }

и Foos сохраняются в таблице следующим образом:

foo_bars (
    bar_id int, 
    foo varchar(64)
);

UPDATE:

Я знаю, как отображать другие объекты, но во многих случаях это слишком много. Похоже, то, что я предлагаю, невозможно без создания еще одного объекта или заканчивается всем в каком-то столбце blob.

4b9b3361

Ответ 1

Это Hibernate terms "коллекция значений" или "элементов". Для него есть (Hibernate specific) аннотация. JPA не поддерживает это (пока).

Короче, аннотируйте свою коллекцию следующим образом:

@CollectionOfElements
@JoinTable(
        [email protected](name="..."),
        joinColumns = @JoinColumn(name="...") // References parent
)
@Column(name="...value...", nullable=false)

Это создаст необходимую таблицу с внешними ключами и ограничениями.

Ответ 3

Если вы храните свой список в виде массива, он работает:

setFoos(String[] foos);

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

setFoos(myList.toArray(new String[myList.size()]));

Ответ 4

создать объект FooBars

реорганизовать атрибут "Foos" на

@OneToMany Список Foos

Ответ 5

Я думаю, что вам нужно:

@Entity 
public class Bar {
    @Id @GeneratedValue long id;

    @OneToMany(mappedBy="bar")   //"bar" = field name in mapping class
    List<FooBar> Foos;
}

@Entity 
public class FooBar {
    @Id @GeneratedValue long id;

    @ManyToOne
    @JoinColumn(name="bar_Id")  
    Bar bar;
}

Ответ 6

Здесь 'Foos' - это список строк, так что он является однонаправленным. Мы можем сделать это в одном классе модели, используя аннотацию @ElementCollection.

@Entity 
@Table(name="bar")
public class Bar {

        @Id @GeneratedValue 
        long id;

        @ElementCollection
        @JoinTable(
            name="foo_bars",
            joinColumns = @JoinColumn( name="bar_id")
          )
        @Column(name="foo")
        List<String> Foos;
    }

В БД bar_id - это внешний ключ в таблице foo_bars.