Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多人和一人关系的Jpa标准_Java_Jpa_Many To Many_Criteria Api_One To One - Fatal编程技术网

Java 多人和一人关系的Jpa标准

Java 多人和一人关系的Jpa标准,java,jpa,many-to-many,criteria-api,one-to-one,Java,Jpa,Many To Many,Criteria Api,One To One,我有3个POJO类-Link、LinkDetails和Tag。 Link和LinkDetails-OneToOne之间的关系,LinkDetails和Tag-manytomy之间的关系 如何使用Jpa标准,查找具有指定标记名的链接列表 @Entity public class Link extends AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long

我有3个POJO类-Link、LinkDetails和Tag。 Link和LinkDetails-OneToOne之间的关系,LinkDetails和Tag-manytomy之间的关系

如何使用Jpa标准,查找具有指定标记名的链接列表

@Entity
public class Link extends AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String url;

    @OneToOne(cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private LinkDetails linkDetails;
}

@Entity
public class LinkDetails extends AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;    

    @Column
    private String description;

    @JoinTable(name = "link_details_2_tag", joinColumns = { @JoinColumn(name = "link_details_id")}, inverseJoinColumns = { @JoinColumn(name = "tag_id") })
    @ManyToMany(targetEntity = Tag.class, fetch = FetchType.LAZY)
    private Set<Tag> tags = new TreeSet<Tag>();

}

@Entity
public class Tag extends AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String name;
}
@实体
公共类链接扩展了抽象实体{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@纵队
私有字符串url;
@OneToOne(级联=级联类型.ALL)
@PrimaryKeyJoinColumn
私人链接详情链接详情;
}
@实体
公共类LinkDetails扩展了AbstractEntity{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@纵队
私有字符串描述;
@JoinTable(name=“link\u details\u 2\u tag”,joinColumns={@JoinColumn(name=“link\u details\u id”)},inverseJoinColumns={@JoinColumn(name=“tag\u id”)})
@ManyToMany(targetEntity=Tag.class,fetch=FetchType.LAZY)
私有集标记=新树集();
}
@实体
公共类标记扩展了抽象实体{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@纵队
私有字符串名称;
}
@覆盖
公共列表getLinksByTag(字符串标记){
CriteriaBuilder cBuilder=getEntityManager().getCriteriaBuilder();
CriteriaQuery条件=cBuilder.createQuery(Link.class);
Root-linkRoot=标准.from(Link.class);
Join-linkDetailsJoin=linkRoot.Join(Link\u0.linkDetails);
Join-tagJoin=linkDetailsJoin.Join(LinkDetails\uuu.tags);
条件。选择(linkRoot);
其中(cBuilder.equal(tagJoin.get(Tag.name),Tag));
TypedQuery query=getEntityManager().createQuery(条件);
返回query.getResultList();
}

您的标准代码在哪里?这里有带示例的文档,我已经找到了解决方案。现在,它将添加itI标记的这个问题,因为它不会询问CriteriaAPI的基本用法未涵盖的任何问题。该案例完全包含在文档中。它对其他用户没有用处。
@Override
public List<Link> getLinksByTag(String tag){

    CriteriaBuilder cBuilder = getEntityManager().getCriteriaBuilder();
    CriteriaQuery<Link> criteria = cBuilder.createQuery( Link.class );
    Root<Link> linkRoot = criteria.from( Link.class );
    Join<Link, LinkDetails> linkDetailsJoin = linkRoot.join(Link_.linkDetails);
    Join<LinkDetails, Tag> tagJoin = linkDetailsJoin.join(LinkDetails_.tags);
    criteria.select(linkRoot);
    criteria.where(cBuilder.equal(tagJoin.get(Tag_.name), tag));
    TypedQuery<Link> query = getEntityManager().createQuery(criteria);
    return query.getResultList();
}