jpa 中的一对多,多对一关系设置,可直接用findall方法查询出所需的数据,非常方便
来源:互联网 发布:数据的逻辑结构 编辑:程序博客网 时间:2024/04/29 00:42
贴一个之前做过的社区(省略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)@JsonIgnoreprivate Tenant tenant; @JsonIgnore@OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="topic")private List<Comments> comments;@JsonIgnore@OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="topic")private List<TopicLike> TopicLike; @Transient private Integer commentsCount; @Transientprivate 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)@JsonIgnoreprivate Topic topic;/** 评论用户id */@JoinColumn(name = "userId")@ManyToOne(cascade = CascadeType.REFRESH, optional = true)@JsonIgnoreprivate User user;/** 评论 */@Column(columnDefinition = "TEXT")private String description;@JsonIgnore@OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="comments")private List<CommentLike> commentLike;@JsonIgnore@OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="comments")private List<MultistageComments> 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)@JsonIgnoreprivate User users;@JoinColumn(name = "commentsId")@ManyToOne(cascade = CascadeType.REFRESH, optional = true)@JsonIgnoreprivate Comments comments;/** 评论用户id */@JoinColumn(name = "userId")@ManyToOne(cascade = CascadeType.REFRESH, optional = true)@JsonIgnoreprivate User user;@JsonIgnore@OneToMany(cascade = javax.persistence.CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "multistageComments")private List<CommentLike> 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)@JsonIgnoreprivate Comments comments;/** 回复 id */@JoinColumn(name = "multisId")@ManyToOne(cascade = CascadeType.REFRESH, optional = true)@JsonIgnoreprivate MultistageComments multistageComments;/** 点赞人id */@JoinColumn(name = "likeUserId")@ManyToOne(cascade = CascadeType.REFRESH, optional = true)@JsonIgnoreprivate User user;/** 被点赞人id */@JoinColumn(name = "bylikeUserId")@ManyToOne(cascade = CascadeType.ALL, optional = true)@JsonIgnoreprivate 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<Topic> findByKeyword(final String keyword, int pageNumber, int pageSize) {// 过滤条件Specification<Topic> spec = new Specification<Topic>() {@Overridepublic Predicate toPredicate(Root<Topic> root, CriteriaQuery<?> query, CriteriaBuilder builder) {List<Predicate> predicates = Lists.newArrayList();if (StringUtils.isNotEmpty(keyword)) {Predicate predicateT = builder.like(root.<String> get("title"), "%/" + keyword + "%", '/');Predicate predicateP = builder.like(root.<String> get("profile"), "%/" + keyword + "%", '/');Predicate predicateI = builder.like(root.<String> get("imageUrl"), "%/" + keyword + "%", '/');Predicate predicateU = builder.like(root.<String> get("url"), "%/" + keyword + "%", '/');predicates.add(builder.or(predicateT, predicateP, predicateI, predicateU));}predicates.add(builder.equal(root.<String> get("delFlag"), Topic.DEL_FLAG_NORMAL));predicates.add(builder.equal(root.<String> 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<Order> orderList = new ArrayList<Order>();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<MultistageComments> findMuByselfId(String id);//jpa://@Query(value = "from MultistageComments where comments_id = (?1) and del_flag=0 order by create_date desc")// List<MultistageComments> findByKeywords(String keyword);//nativeQuery=true 如果需要分页还是用原声的要方便 因为dao层在继承PagingAndSortingRepository 对象后后可以直接返回封装后的page对象,//贴一下 该对象就知道了@NoRepositoryBean //page就是封装的分页对象.public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {/** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options */Iterable<T> 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<T> findAll(Pageable pageable);}
阅读全文
1 0
- jpa 中的一对多,多对一关系设置,可直接用findall方法查询出所需的数据,非常方便
- JPA:一对多、多对一关系
- JPA中的一对多关系
- JPA一对多和多对一关系
- jpa 双向一对多,多对一关联关系
- JPA简单对一对多关系的数据进行插入,先一后多
- mybatis 关联数据的查询 多对一 一对多
- JPA一对多关系
- JPA的一对多,多对一映射
- Hibernate关于一对多 多对一 多对多关联关系的设置
- 使用JPA的建立一对多关系
- MyBatis实现一对多和多对一的关联关系的查询
- hibernate关联关系中的一对多以及多对一
- mysql 一对多 查询 出一行数据
- JPA一对多关系,在一端更新所包含多端引用的问题
- JPA(三)之实体关系一对多(多对一)
- 【hibernate】多对一,一对多关系
- Hibernate一对多、多对一关联关系的使用
- BaseAdapter优化
- iOS_SmartSVN的安装与破解
- 一、MySql初感受及在Windows下的安装
- Wu-Manber算法
- 计算机网络基础常考面试题精华总结
- jpa 中的一对多,多对一关系设置,可直接用findall方法查询出所需的数据,非常方便
- UIImage初始化一张图片有几种方法?简述各自的优缺点。
- Unity 平台路径
- Opencv矩阵的维度与通道
- 在JavaScript学习过程中要感谢的人
- 深入研究山寨币签名系统开发区块链底层技术
- python 容器
- HelloWorld
- Myeclipse/eclipse 生成set get 方法及快捷键