Получение связанных объектов при весенней загрузке с помощью hibernate? - PullRequest
0 голосов
/ 07 марта 2019

У меня есть этот "родительский" класс:

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

    private String firstName;
    private String lastName;

    @OneToMany(fetch=FetchType.LAZY, mappedBy = "parent", cascade = {CascadeType.ALL})
    List<Child> children;
 }

И у меня есть следующий дочерний класс:

@Entity
@Table(name = "children")
public class Child {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long childId;

    @ManyToOne
    @JoinColumn(name="parent_id")
    private Parent parent;

    private String name;
}

Я также отправляю это как тело моего запроса:

{
        "firstName": "Test",
        "lastName": "Parent",
        "children":[{
                "name":"jack"
            },
            {
                "name":"jill"
            }
        ]

}

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

ПОЛУПРОЗРАЧНОЕ ОБНОВЛЕНИЕ (МОЖЕТ?): я заметил, что поле parent_id в базе данных для дочерних записей, похоже, не заполняется!Понятия не имею почему!

1 Ответ

0 голосов
/ 07 марта 2019

Вы создаете связь с неправильными именами столбцов.

Ваш родительский класс имеет столбец id, определенный как:

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

Это создаст столбец id в вашей таблице parent.

Ваш дочерний класс имеет внешний ключ, определенный как:

 @ManyToOne
 @JoinColumn(name="parent_id")
 private Parent parent;

Вы указываете искать столбец parent_id в таблице parent, чтобы установить связь. Такой колонки не существует.

Если вы хотите указать, что имя столбца внешнего ключа должно быть parent_id, вы должны определить его как:

 @ManyToOne
 @Column(name = "parent_id") // Your child field
 @JoinColumn(name="id") // Your parent id field
 private Parent parent;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...