2015-01-22 4 views
0

Вот минимальной пример базы данных моей программы:Отображение в истории объекта к объекту проекта с JPA сохранением

database

Я пытаюсь сопоставить эти таблицы в следующие классы Java с использованием JPA аннотации (I» м совершенно новые с теми Гремлинами)


Project.java

@Entity 
@Table(name = "projects") 
public class Project { 

    @Id 
    String project_name; 

    @Column 
    String description; 

    @ ?? 
    History history; 


    // methods 
    ... 
} 

History.Java

@Entity 
@Table(name = "histories") 
public class History { 

    @Id 
    String history_id; 

    @ ?? 
    Map<Date, String> sets; // represents the date/description pairs associated to the project 


    // methods 
    ... 
} 

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

ответ

1

Во-первых, в объектах Java вы должны придерживаться условных обозначений java. Например, столбец project_name DB должен быть отображен в поле projectName (с использованием аннотации @Column). Во-вторых, на диаграмме DB на 100% не видно, какова связь между этими двумя таблицами, но, судя по имени во множественном числе (histories), я думаю, это @OneToMany. В-третьих, этот объект «Карта в истории» (sets) не может быть выполнен так, но он покрыт отношением @OneToMany. Попробуйте что-нибудь подобное

@Entity 
@Table(name = "projects") 
public class Project { 

    @Id 
    @Column(name = "project_name") 
    private String projectName; 

    private String description; 

    @OneToMany(mappedBy = "project") 
    private List<History> historyList; 

    // getters and setters 
    ... 
} 

@Entity 
@Table(name = "histories") 
public class History { 

    @Id 
    @Column(name = "history_id") 
    private Integer historyId; 

    @Temporal(TemporalType.DATE) // or TemporalType.TIMESTAMP 
    private Date date; 

    private String description; 

    @ManyToOne 
    @JoinColumn(name = "project_name") 
    private Project project; 

    // getters and setters 
    ... 
} 
Смежные вопросы