jpa 中的一对多,多对一关系设置,可直接用findall方法查询出所需的数据,非常方便

您所在的位置:网站首页 jpa一对多保存 jpa 中的一对多,多对一关系设置,可直接用findall方法查询出所需的数据,非常方便

jpa 中的一对多,多对一关系设置,可直接用findall方法查询出所需的数据,非常方便

2023-03-27 05:27| 来源: 网络整理| 查看: 265

贴一个之前做过的社区(省略get和set):

  通过下面的设置, 要是你的框架没什么问题的话,就可以直接生成表,表字段,表关系,还可以设置注释,等等, 主要是一对多,多对多等关系, 一目了然

话题表 :

/** * 话题实体 * * @author zb * */ @Entity @Table(name = ""这里设置表名") public class Topic extends BaseEntity{ private static final long serialVersionUID = -337820391660026719L; @Id @GeneratedValue(generator = "UIDGenerator") @GenericGenerator(name = "UIDGenerator", strategy = "com.comtop.msp.framework.persistence.UIDGenerator") @Column(length = 40) private String topicId; /** 发布时间 */ @Temporal(TemporalType.TIMESTAMP) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Column(updatable = true) private Date publishDate; /** 图片地址 */ @Column(length = 100) private String imageUrl; /** 话题标题 */ @Column(length = 80) private String title; /** 说明 */ @Column(length = 100) private String explains; /** 真实浏览 */ @Column(length = 1) private Integer realScan; /** 虚拟浏览 */ @Column(length = 1) private Integer falseScan; /** 排序 */ @Column(length = 1) private Integer sort; /** 是否显示 */ @Column(length = 1) private Integer displayStatus; /** 所在租户 */ @JoinColumn(name = "tenantId") @ManyToOne(optional = true) @JsonIgnore private Tenant tenant; @JsonIgnore @OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="topic") private List comments; @JsonIgnore @OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="topic") private List TopicLike; @Transient private Integer commentsCount; @Transient private Integer sortCount; 评论表:/** * 一级评论实体 * * @author zb * */ @Entity @Table(name = "这里设置表名") public class Comments extends BaseEntity { private static final long serialVersionUID = -337820391660026719L; @Id @GeneratedValue(generator = "UIDGenerator") @GenericGenerator(name = "UIDGenerator", strategy = "com.comtop.msp.framework.persistence.UIDGenerator") @Column(length = 40) private String commentsId; /** 话题Id */ @JoinColumn(name = "topicId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private Topic topic; /** 评论用户id */ @JoinColumn(name = "userId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private User user; /** 评论 */ @Column(columnDefinition = "TEXT") private String description; @JsonIgnore @OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="comments") private List commentLike; @JsonIgnore @OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="comments") private List multistageComments; /** 发布时间 */ @Temporal(TemporalType.TIMESTAMP) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Column(updatable = true) private Date publishDate; /** 排序 */ @Column(length = 1) private Integer sort; /** 评论点赞数 */ @Column(length = 1) private Integer likeCount; } 多级回复:@Entity @Table(name = "这里设置 ") public class MultistageComments extends BaseEntity { private static final long serialVersionUID = -33820391660026719L; @Id @GeneratedValue(generator = "UIDGenerator") @GenericGenerator(name = "UIDGenerator", strategy = "com.comtop.msp.framework.persistence.UIDGenerator") @Column(length = 40) private String multisId; @JoinColumn(name = "replyToUserId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private User users; @JoinColumn(name = "commentsId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private Comments comments; /** 评论用户id */ @JoinColumn(name = "userId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private User user; @JsonIgnore @OneToMany(cascade = javax.persistence.CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "multistageComments") private List commentLike; /** 评论 */ @Column(columnDefinition = "TEXT") private String description; @Column(length = 40) private String selfmultisId; /** 发布时间 */ @Temporal(TemporalType.TIMESTAMP) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Column(updatable = true) private Date publishDate; } 点赞表:@Entity @Table(name = "这里设置表名") public class CommentLike extends BaseEntity { private static final long serialVersionUID = -3378203916620026719L; // 主键id @Id @GeneratedValue(generator = "UIDGenerator") @GenericGenerator(name = "UIDGenerator", strategy = "com.comtop.msp.framework.persistence.UIDGenerator") @Column(length = 40) private String clId; /** 点赞评论id */ @JoinColumn(name = "commentsId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private Comments comments; /** 回复 id */ @JoinColumn(name = "multisId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private MultistageComments multistageComments; /** 点赞人id */ @JoinColumn(name = "likeUserId") @ManyToOne(cascade = CascadeType.REFRESH, optional = true) @JsonIgnore private User user; /** 被点赞人id */ @JoinColumn(name = "bylikeUserId") @ManyToOne(cascade = CascadeType.ALL, optional = true) @JsonIgnore private User buser; /** 发布时间 */ @Temporal(TemporalType.TIMESTAMP) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Column(updatable = true) private Date publishDate; } /** * 根据关键词查询所有记录 * 关系理清楚之后,贴种通用查询方法,如果没有什么特殊的要求,通常这个方法就能全部搞定了,直接改改就能使用了 * @param keyword * 关键词 * @return 结果集合 */ public Page findByKeyword(final String keyword, int pageNumber, int pageSize) { // 过滤条件 Specification spec = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { List predicates = Lists.newArrayList(); if (StringUtils.isNotEmpty(keyword)) { Predicate predicateT = builder.like(root. get("title"), "%/" + keyword + "%", '/'); Predicate predicateP = builder.like(root. get("profile"), "%/" + keyword + "%", '/'); Predicate predicateI = builder.like(root. get("imageUrl"), "%/" + keyword + "%", '/'); Predicate predicateU = builder.like(root. get("url"), "%/" + keyword + "%", '/'); predicates.add(builder.or(predicateT, predicateP, predicateI, predicateU)); } predicates.add(builder.equal(root. get("delFlag"), Topic.DEL_FLAG_NORMAL)); predicates.add(builder.equal(root. get("delFlag"), Comments.DEL_FLAG_NORMAL)); root.get("tenant").get("tenantId"); Predicate p1 = builder.equal(root.get("tenant").get("tenantId"), UserUtils.getTenantId()); predicates.add(p1); // 将所有条件用 and 联合起来 if (predicates.size() > 0) { return builder.and(predicates.toArray(new Predicate[predicates.size()])); } return builder.conjunction(); } }; List orderList = new ArrayList(); orderList.add(new Order(Direction.DESC, "sort")); orderList.add(new Order(Direction.DESC, "createDate")); PageRequest pageRequest = new PageRequest(pageNumber - 1, pageSize, new Sort(orderList)); return topicDao.findAll(spec, pageRequest); } //下面贴下dao层如何写jpa 和 原声sql //写原生sql: //@Query(value = "select * from msp_topics_multistage_comments where selfmultis_id =(?1) " ,nativeQuery=true ) // List findMuByselfId(String id); //jpa: //@Query(value = "from MultistageComments where comments_id = (?1) and del_flag=0 order by create_date desc") // List findByKeywords(String keyword); //nativeQuery=true 如果需要分页还是用原声的要方便 因为dao层在继承PagingAndSortingRepository 对象后后可以直接返回封装后的page对象, //贴一下 该对象就知道了 @NoRepositoryBean //page就是封装的分页对象. public interface PagingAndSortingRepository extends CrudRepository { /** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options */ Iterable findAll(Sort sort); /** * Returns a {@link Page} of entities meeting the paging restriction provided in the {@code Pageable} object. * * @param pageable * @return a page of entities */ Page findAll(Pageable pageable); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3