草庐IT

多对多

全部标签

java - Hibernate 延迟加载不适用于多对一映射

我的多对一映射存在性能问题。当我在日志文件中调试SQL查询时,主要查询没问题,但在我有其他查询表示多对一对象映射之后。实体.hbm.xml:SEQ_MY_ENTITY对象1.hbm.xml:对象2.hbm.xml:查询HBM:publicListfindByObject1Id(Integerobject1Id)throwsDataAccesException{Listresults=null;try{Queryquery=this.getSession().createQuery("fromEntityentwhereent.object1.id=:object1Id");query.

java - 是否可以从与 HQL 的多对多关联中批量删除?

如果是这样,语法是什么?假设我希望Foo的一个实例与Bar的所有实例无关:在SQL中,它只是:deletefromFOO_BAR_MAPPINGwhereFOO_ID=?在HQL中,我假设它会是这样的:deletefromBar.foosfooswherefoos.id=:id(其中foos是Foo的映射集合)但似乎是错误的,给出:org.hibernate.hql.ast.QuerySyntaxException:Bar.foosisnotmapped这甚至可以用HQL实现吗? 最佳答案 要回答您的具体问题,不,据我所知,HQL是

java - Ebean 多对多查询

我有两个类,user和car。两者都有ManyToMany相互映射。用户:@EntitypublicclassUserextendsModel{privateintyear;@ManyToMany(cascade=CascadeType.ALL)privateListcars;}汽车:@EntitypublicclassCarextendsModel{@ManyToMany(mappedBy="cars",cascade=CascadeType.ALL)privateListusers;}使用ebean,我只想查询1999年以来在其列表中提供用户的那些汽车。我不想在Java代码中迭代用

Java:多对象变量(静态)

我是面向对象编码的新手,我遇到了以下问题。(注意this解决方案是我问题的一部分)我需要一个许多对象都可以引用的变量,但要为每个对象保留一些“私有(private)”信息。更具体地说,我创建了一个名为Worker的类,我希望该类的每个对象都有一个int类型的唯一ID。所以,第一个对象有ID=1,第二个对象有ID=2等...请注意,我不想要一个随机整数,而我需要从0和递增...类中变量的声明和初始化staticprivateintworkId=0;我试图通过在构造函数体中添加这行代码来实现自增workId++;我实例化一些对象,将它们添加到ArrayList并使用for循环打印每个对象的

java - JDBC 模板 - 一对多

我有一个看起来像这样的类。我需要从两个数据库表中填充它,如下所示。有什么首选方法可以做到这一点吗?我的想法是有一个服务类来选择一个List通过ResultSetExtractor来自DAO。然后做一个foreach在该列表上,然后选择List通过另一个人发送给个人的电子邮件ResultSetExtractor,并将其附加到foreach循环。是否有更好的方法,或者这已经是最好的方法了吗?publicclassPerson{privateStringpersonId;privateStringName;privateArrayListemails;}createtablePerson(p

java - 多对多关系的属性 (Hibernate)

我有实体类A和C。它们正在映射表tblA和tblC,它们之间存在多对多关系,tblB在它们之间进行映射。tblB包含A_ID、C_ID和SetDate,最后一个是设置日期,因此是关系的属性。我的问题是,我如何最好地映射到这个属性中?目前它们未映射,如下所示:答:@ManyToMany(targetEntity=C.class,cascade={CascadeType.PERSIST,CascadeType.MERGE})@JoinTable(name="tblB",joinColumns=@JoinColumn(name="A_ID"),inverseJoinColumns=@Join

java - 为什么我需要第三个表来进行多对多映射?为什么我不能只使用两个表?

我一直在尝试多对多两个类Person和Address之间的关系。我不知道,但在某个地方我没有按照正确的思路思考。例如对于多对多映射,我制作了两个表CREATETABLEperson(p_idINTEGER,p_nameTEXT,PRIMARYKEY(p_id));CREATETABLEaddress(a_idINTEGER,addressTEXT);然后我在映射xml中尝试了一些东西。在一些不成功的尝试之后,我读到你需要三个表来进行多对多映射,就像answer一样。对我的一个问题说。请解释一下这是什么原因?为什么我需要第三张table?为什么我不能仅与两个表建立关联?

java - JPA/Hibernate 双向多对一导致 StackOverflowException

我有具有双向一对多关系的实体User和GrantedRole。当我尝试将GrantedRole添加到User中的Set时,没有抛出异常,但是当我调试User和GrantedRole对象的变量时,有一个描述com.sun.jdi.InvocationExceptionoccurredinvokingmethod.变量的不同字段可以在调试时读取,但是当我选择User中的roles字段或GrantedRole中的user字段时,我得到与上面相同的描述。当我进入用户中的GrantedRole集合时,我最终找到了以下描述:Detailformattererror:Anexceptionoccur

java - 双向多对多关系中的循环引用

我的实体中存在双向多对多关系。请参见下面的示例:publicclassCollaboration{@JsonManagedReference("COLLABORATION_TAG")privateSettags;}publicclassTag{@JsonBackReference("COLLABORATION_TAG")privateSetcollaborations;}当我尝试将其序列化为JSON时,出现以下异常:`"java.lang.IllegalArgumentException:Cannothandlemanaged/backreference'COLLABORATION_T

java - 在 JPA 中将实体添加到大型多对多关系中

我有一个Group实体,其中包含多对多关系中的User实体列表。它由包含两个ID的典型连接表映射。这个列表可能非常大,一个组中有一百万或更多的用户。我需要向组中添加一个新用户,通常是这样的group.getUsers().add(user);user.getGroups().add(group);em.merge(group);em.merge(user);如果我了解典型的JPA操作,这是否需要将超过100万用户的整个列表拉到集合中以便添加新用户然后保存?对我来说,这听起来不太可扩展。我不应该在JPA中定义这种关系吗?在这种情况下,我应该直接操作连接表条目吗?请原谅松散的语法,我实际上