2017-06-02 40 views
0

我正在写一个JPA和Postgres数据库的服务。我有一类名为学生:JPA如何在不加入其他表的情况下返回结果?

public class Student { 
    @id 
    private String id; 

    private String firstName; 
    private String lastName; 

    @OneToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "student_phone", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "phone_id")) 
    private Set<Phone>; 

    // Setter and Getter 
} 

和电话类:

public class Phone { 
    @id 
    private String id; 

    private String number; 

    // Setter and Getter 
} 

现在会出现在我的分贝三个表,下面是他们列:

  • 学生: ID,名字,姓氏
  • 电话:身份证号码
  • student_phone:student_id,phone_id

现在,每次我从db中查询学生时,结果都会包含相应的手机。我可以只在学生表中获得内容吗?有时候我不想延长学生的电话信息。

+0

我还不能coommet。但检查这篇文章https://stackoverflow.com/questions/17431312/difference-between-join-and-join-fetch-in-hibernate – twist3r

+0

你使用元帅到XML或乔森? –

回答

0

使用懒加载

@OneToMany(fetch=FetchType.LAZY, 

编写本地查询

+0

'@ OneToMany'默认为懒惰 –

0

@OneToMany是默认懒取

我假设你使用REST服务,那么:

试试这个,如果你在JAXB使用XML @XmlTransient

@XmlTransient 
@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "student_phone", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "phone_id")) 
private Set<Phone>; 

,或者如果你使用JSON,你可以添加此@JsonIgnore

+0

嗨Abihabi87,我不想使用@JsonIgnor,因为: 1.有时我不想在某个时间显示手机信息bu。 2.我知道当我添加这个注解时,手机信息仍然是从db中调用的,但只是被spring-boot忽略。有没有可能不从数据库中检索它,这可以提高性能。 –

相关问题