JPA для дочерних шагов с помощью таблицы соединений - PullRequest
0 голосов
/ 13 мая 2019

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

mysql> select * from template_step;
+----+-----------+
| id | step_name |
+----+-----------+
|  1 | Step 1    |
|  2 | Step 2    |
|  3 | Step 3    |
|  4 | Step 4    |
+----+-----------+

mysql> select * from next_steps;
+-----------------+--------------+
| current_step_id | next_step_id |
+-----------------+--------------+
|               1 |            2 |
|               1 |            3 |
|               3 |            4 |
+-----------------+--------------+

Затем у меня есть класс Entity, который представляет первую таблицу, и я пытаюсь выяснить правильную настройку JPA для представления дочерних шагов в виде списка вэтот класс.

@Entity
@Table(name = "template_step")
public class TemplateStepRecord {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;

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

    @OneToMany
    @JoinTable(name="next_steps", joinColumns={@JoinColumn(name="next_step_id", referencedColumnName="current_step_id")})
    private List<TemplateStepRecord> children = new ArrayList<>();
}

Эти аннотации на children явно неверны, так как я получаю сообщение об ошибке, подобное этому:

Unable to find column with logical name: current_step_id in org.hibernate.mapping.Table(template_step) and its related supertables and secondary tables

Я не уверен, что сюда поместитьили если к этому или к примечанию OneToMany должны присутствовать какие-либо дополнительные аннотации.

Спасибо.

1 Ответ

0 голосов
/ 13 мая 2019

Это двунаправленное отображение OneToMany / ManyToOne.Смотри https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/one-to-many-bidirectional.html

@Entity
@Table(name = "template_step")
public class TemplateStepRecord {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

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

    @OneToMany(mappedBy="templateStepRecord")
   private final List<TemplateNextStepRecord> children = new ArrayList<>();
}

@Entity
@Table(name = "next_steps")
public class TemplateNextStepRecord {

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

    @ManyToOne
    @JoinColumn(name="current_step_id")
    private TemplateStepRecord templateStepRecord; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...