Как получить автоматически сгенерированное значение? - PullRequest
1 голос
/ 27 апреля 2009
@TableGenerator(name = "trial", table = "third",
        pkColumnName = "a" , valueColumnName = "b", pkColumnValue = "first")

@Entity

public class First{

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "trial")
    protected int a;

    @OneToMany(mappedBy ="first", cascade = CascadeType.PERSIST)
    @JoinColumn(name = "a")
    protected List<Second> seconds;
}

@Entity

public class Second{

    @Id
    protected int a;

    @ManyToOne
    @JoinColumn(name = "b")
    First first;
}

Когда я запускаю следующее в основном:

Second aSecond = new Second();

aSecond.a = 2;

First aFirst = new First();

List<Second> scnds = new ArrayList<Second>();
scnds.add(aSecond);

aFirst.seconds = scnds;

aEntityManager.getTransaction().begin();

aEntityManager.persist(aFirst);

aEntityManager.getTransaction().commit();

Он установил ноль в столбце "b" во второй таблице? Как я могу получить значение, которое автоматически создается в a в First, чтобы установить в b в Second?

1 Ответ

1 голос
/ 27 апреля 2009

Пара вещей:

Первое: вам не нужна аннотация @JoinColumn (name = "a") для коллекции секунд в классе First. Отображение обрабатывается Вторым классом.

Далее:

Second aSecond = new Second();
aSecond.a = 2;
First aFirst = new First();

//its a bi-directional mapping so you have to set the references both ways
aFirst.seconds.add(aSecond);
aSecond.first = aFirst;

aEntityManager.getTransaction().begin();
aEntityManager.persist(aFirst);
aEntityManager.getTransaction().commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...