java jpa 字段 关联_SpringBoot JPA 表关联查询实例

今天给大家介绍一下如何利用JPA实现表关联查询。

今天给大家举一个一对多的关联查询,并且是使用JPA原生的findBy语句实现的。

例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是FloorContent(商品楼层内容表)。下面看两张表的源代码:

Floor类:

package cms.model;

import cms.model.base.BaseDomain;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

import java.io.Serializable;

import java.util.List;

/**

* Created by Roney on 2016/10/10.

* 楼层管理

*

*/

@Entity

@Table(indexes = {@Index(name = "idx_floor_user",columnList = "user_id")})

public class Floor extends BaseDomain implements Serializable {

@Id

@GenericGenerator(name = "PKUUID", strategy = "uuid2")

@GeneratedValue(generator = "PKUUID")

@Column(length = 36)

protected String id;

/**

* 发布用户ID

*/

@Column(length = 36,name = "user_id")

private String userId;

/**

* 楼层名称

*/

private String name;

/**

* 楼层的模板路径

*/

private String templateUrl;

/**

* 类型

* 1.管理端

* 2.供应商

*/

private Integer type;

/**

* 排序

*/

@Column(name = "show_index", nullable = false)

private Integer showIndex;

/**

* 是否禁用

* */

@Column(nullable = false)

private Boolean isDisable=false;

@OneToMany(fetch = FetchType.LAZY,mappedBy = "floor")

private List floorContents;

public List getFloorContents() {

return floorContents;

}

public void setFloorContents(List floorContents) {

this.floorContents = floorContents;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getTemplateUrl() {

return templateUrl;

}

public void setTemplateUrl(String templateUrl) {

this.templateUrl = templateUrl;

}

public Integer getShowIndex() {

return showIndex;

}

public void setShowIndex(Integer showIndex) {

this.showIndex = showIndex;

}

public Boolean getDisable() {

return isDisable;

}

public void setDisable(Boolean disable) {

isDisable = disable;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Floor floor = (Floor) o;

return id != null ? id.equals(floor.id) : floor.id == null;

}

@Override

public int hashCode() {

return id != null ? id.hashCode() : 0;

}

}

FloorContent类:

package cms.model;

import cms.model.base.BaseDomain;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;

import java.io.Serializable;

/**

* Created by Roney on 2016/10/10.

* 楼层的内容

*/

@Entity

@Table(indexes = {@Index(name = "idx_floor_content_user", columnList = "user_id")})

public class FloorContent extends BaseDomain implements Serializable {

@Id

@GenericGenerator(name = "PKUUID", strategy = "uuid2")

@GeneratedValue(generator = "PKUUID")

@Column(length = 36)

protected String id;

/**

* 发布用户ID

*/

@Column(length = 36, name = "user_id")

private String userId;

/**

* 內容名稱

*/

private String name;

/**

*

* 內容圖片

*/

@Column(length = 256)

private String contentImageUrl;

/**

* 類型

* 1.超鏈接

* 2.圖片檢索

*/

private Integer type;

/**

* 超鏈接url

*/

private String linkUrl;

/**

* 圖片檢索內容

*/

private String picSearchContent;

/**

* 排序

*/

@Column(name = "show_index", nullable = false)

private Integer showIndex;

/**

* 是否禁用

*/

@Column(nullable = false)

private Boolean isDisable = false;

@ManyToOne

@JoinColumn(name = "floor_id",foreignKey = @ForeignKey(name = "fk_floor_fc"))

private Floor floor;

public Floor getFloor() {

return floor;

}

public void setFloor(Floor floor) {

this.floor = floor;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getContentImageUrl() {

return contentImageUrl;

}

public void setContentImageUrl(String contentImageUrl) {

this.contentImageUrl = contentImageUrl;

}

public Integer getType() {

return type;

}

public void setType(Integer type) {

this.type = type;

}

public String getLinkUrl() {

return linkUrl;

}

public void setLinkUrl(String linkUrl) {

this.linkUrl = linkUrl;

}

public String getPicSearchContent() {

return picSearchContent;

}

public void setPicSearchContent(String picSearchContent) {

this.picSearchContent = picSearchContent;

}

public Integer getShowIndex() {

return showIndex;

}

public void setShowIndex(Integer showIndex) {

this.showIndex = showIndex;

}

public Boolean getDisable() {

return isDisable;

}

public void setDisable(Boolean disable) {

isDisable = disable;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

FloorContent that = (FloorContent) o;

return id != null ? id.equals(that.id) : that.id == null;

}

@Override

public int hashCode() {

return id != null ? id.hashCode() : 0;

}

}

实体类已经出来了,现在具体说说怎么利用JPA中findBy来实现关联查询:

package cms.model.repository;

import cms.model.Floor;

import cms.model.FloorContent;

import org.springframework.data.domain.Page;

import org.springframework.data.domain.Pageable;

import org.springframework.data.jpa.repository.JpaRepository;

/**

* Created by Roney on 2016/10/10.

* Created by Roney on 2016/10/10.

* 楼层内容管理dao类

*/

public interface FloorContentRepos extends JpaRepository{

public Page findByFloor_IdAndIsDeleteOrderByShowIndexAsc(String floorId,boolean b, Pageable pageable);

}

从例子中就可以看出JPA关联查询主要在“_”这个符号的使用,下面来给大家具体的介绍一下这个符号到底代表什么含义。

首先findBy是必须写的,表示使用JPA规则进行查询。

如果查询的是本张表中的内容,例如查询本张表中的name字段就可以这么写:findByName()。

如果查询的是楼层中的name字段就可以这么写:findByFloor_Name()。

如果是既要查询本张表中的name字段,也要查询楼层中的name字段,就可以这么写:findByFloor_NameAndName()。

从上面的案例就可以看出可以在findBy后面添加要关联的实体类,然后在实体类后面写上“_”,"_"符号后面是添加关联表的字段而不是本身表的字段,这点要记住。如何还想关联更多的表可以在后面添加:And+表名字+“_”+表中要查询的字段。或者只是想关联本身的查询字段可以在后面添加:And+查询的字段。

千万不要写错了,写错的话运行都运行不起来的。所以写的时候要多看看是否符合规则。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值