2015-12-24 233 views
0

我正在用Spring Hibernate + ANgularJS构建应用程序 我有一个模型类JobDetail和另一个模型JobReport。 JobReport将包含一个或多个JobDetail参考。 下面是表的JobDetail春季休眠关系

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; 
} 

这是正确的还是我失去了一些东西? 在Angular中,如何使用列表JobDetail从JOBREPORT中获取相应的NOTES。我正在使用ng-repeat从JobDetail中获取详细信息。我能够从JObDetail获取项目列表,但不能从JobReport列表中获取相应的注释。

任何帮助,请

+0

添加映射'取= @ OneToMany'中的FetchType.EAGER' –

+0

谢谢。我已经添加了。我应该在JOBREPORT表中添加变量'JOB_ID',否则它会自动处理。如果是,如何在JOBREPORT表中填充JOB_ID的值或? – 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',这是一个疯狂的解决方案,它只会不必要地转储内存。这只是在需要时使用提取连接的问题。 – 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,但是如果你不需要,你不需要在实体模型中声明它。

请注意,我已经将字段中的注释更改为getter。

+0

混合字段和getter注释会出现一些问题;) –

+0

出于什么原因? Intellij能够自动生成映射,并且这样做。 –

+0

当意外地混合字段和getters注释时,我发现Hibernate 5元数据构建时出现了一些奇怪的错误。可能是,使用字段注解为id列不是问题。但无论如何,我认为它是一种不好的技术:) –