2015-12-24 1 views
0

Я создаю приложение с Spring Hibernate + ANgularJS У меня есть модель класса JobDetail и другая модель JobReport. JobReport будет содержать одну или несколько ссылок JobDetail. Вот таблица JobDetailSpring hibernate relationship

JOB_ID 
NAME 
CITY 
JOB_NAME 

Вот таблица JobReport

REPORT_ID 
NOTES 
USER_NAME 
JOB_ID 

JobReport может содержать один или более нот для одного JobDetail

Я попытался ниже со ссылкой на документы в Интернете Я определил отношение «один ко многим» в JobDetail как ниже

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

@OneToMany(mappedBy="jobnotes") 
private List<JobReport> jobReport = new ArrayList<>(); 

public List<JobReport> getJobReport() { 
    return jobReport; 
} 

public void setJobReport(List<JobReport> jobReport) { 
    this.jobReport = jobReport; 
} 

Я определил многие-к-одному отношение в JobReport, как показано ниже,

@ManyToOne 
@JoinColumn(name="JOB_ID") 
private JobDetail jobnotes; 

public JobDetail getJobnotes() { 
    return jobnotes; 
} 

public void setJobnotes(JobDetail jobnotes) { 
    this.jobnotes = jobnotes; 
} 

правильно ли это или я упускаю что-то? In Angular Как я могу получить соответствующие ПРИМЕЧАНИЯ из JOBREPORT, используя список JobDetail. Я использую ng-repeat, чтобы получить данные из JobDetail. Я могу получить список элементов из JObDetail, но не соответствующие заметки из списка JobReport.

Любая помощь, пожалуйста,

+0

Добавить 'выборки = FetchType.EAGER' в '@ OneToMany' –

+0

Спасибо. Я добавил. Должен ли я добавить переменную «JOB_ID» в таблицу JOBREPORT, или она будет автоматически исправлена. Если да, как заполнить значение JOB_ID в таблице JOBREPORT или? – CrazyMac

+0

Да, вы должны добавить его. И еще одно: сопоставьте свои отношения в играх, а не в поле. –

ответ

0

Он работал по подходу ниже. Это для тех, кто ищет решения

Вот JOBDETAIL класс

@OneToMany(mappedBy="jobnotes", fetch = FetchType.EAGER) 
private List<JobReport> jobReport = new ArrayList<>(); 

Вот это JOBREPORT класс

@ManyToOne 
@JoinColumn(name="JOB_ID", referencedColumnName = "JOB_ID", insertable=false, updatable=false) 
private JobDetail jobnotes; 

Я имел отображение на полях

+0

Установка отношения к 'EAGER' без необходимости везде, как видно в этом случае, является сумасшедшим решением, которое будет просто отбрасывать память без необходимости. Речь идет только об использовании соединений fetch, когда это необходимо. – Tiny

0

Это должно работать:

JobDetail

private int id; 

private List<JobReport> jobReport = new ArrayList<>(); 

@OneToMany(mappedBy="jobnotes", fetch = FetchType.EAGER) 
public List<JobReport> getJobReport() { 
    return jobReport; 
} 

public void setJobReport(List<JobReport> jobReport) { 
    this.jobReport = jobReport; 
} 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name="JOB_ID") 
public int getId(){ 
    return id; 
} 

JobReport

private JobDetail jobnotes; 

@ManyToOne 
@JoinColumn(name="JOB_ID", referencedColumnName = "JOB_ID") 
public JobDetail getJobnotes() { 
    return jobnotes; 
} 

public void setJobnotes(JobDetail jobnotes) { 
    this.jobnotes = jobnotes; 
} 

JOB_REPORT таблица должна иметь столбец JO B_ID, но вам не нужно объявлять его в модели объекта, если вы не хотите.

Обратите внимание, что я изменил аннотации с полей на геттеры.

+0

У вас возникнут проблемы с смешиванием полей и аннотаций геттеров;) –

+0

По какой причине? Intellij способен автогенерировать сопоставления, и он делает это. –

+0

У меня были некоторые странные ошибки с созданием метаданных Hibernate 5 при случайном смешивании полей и аннотаций геттеров. Может быть, использование аннотации поля для столбца id не является проблемой. Но в любом случае я считаю это плохой техникой :) –

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