2016-07-01 4 views
0

Я знаю, что этот вопрос может быть простым, но, во всяком случае, я хочу, чтобы реализовать простой родитель-потомок в одной таблице, используя спящий режим:Наследования между объектами в пределах одной таблицы

Parent 
|  \ 
Child1 Child2 
|   | 
Junior1 Junior2 

так это должно выглядеть следующим образом в базе данных:

id | name | parent_id 
1 Parent null 
2 Child1 1 
3 Child2 1 
4 Junior1 2 
5 Junior2 3 

в случае @Entity класса:

@Entity 
@Table(name = "PARENT_CHILD") 
public class ParentChild { 

    @Id 
    @Column(name = "ID", nullable = false, unique = true) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @Column(name = "NAME", nullable = false) 
    private String name; 

    private String parentId; // <------ how this should be mapped? 
} 

Что такое наилучшей практикой в ​​отношении того, как я должен сопоставить parentId или сделать следующий способ? Спасибо

ответ

1

Как правило, вы можете создать реляционное отображение для отображения в StateEntity

@ManyToOne 
@JoinColumn(name="parent_id", referencedColumnName="id") 
private ParentChild parent; 

в случае, если он является родителем, то его родитель может быть пустым.

Если в вашем проекте из-за производительности есть случай, вы хотите загрузить parent_id только вместо всего родительского экземпляра ParchentChild. Вы можете добавить отображение столбцов, а

@Column(name="parent_id", insertable=false, updatable=false) 
private int parentId; 

вставляться = ложь, обновляемым = ложь слишком убедитесь, что система может обновить parent_id через поле @ManyToOne только

+0

Привет, Le Тхо! Спасибо за ответ! Я уверен, что мне не нужен родительский идентификатор напрямую, так как я не получу parentId, а объект ParentChild. Итак, я думаю, мне нужен полный частный родитель ParentChild; поле, правильно? – ServerSideCat

+0

Да. то нужно просто сопоставление @ManyToOne. –

+0

, когда мой dao пытается его создать, он получает исключение: вызвано: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: не удается удалить или обновить родительскую строку: ограничение внешнего ключа завершается с ошибкой ('test_db'.'PARENT_CHILD' , CONSTRAINT 'FK_5ghn6rityqie7cnwp5i5tf2ou' ИНОСТРАННЫЙ КЛЮЧ (' PARENT_ID') ССЫЛКИ 'PARENT_CHILD' (' ID')) Что это может быть? – ServerSideCat

Смежные вопросы