我有以下问题。 我有一个与其他用户实体有多对多关系的用户实体。 因此,我希望通过多种注释进行自我连接。 此关系基于整个系统中使用的现有表,因此我根本无法更改DB。 所以我们有2个表User(Id,ShortName)和UserLink(ParentId,ChildId)。 ID的注释分配给ShortName,但User和UserLink中的实际键是来自UserLink的ID和来自UserLink的ParentId和ChildId。 我试图从User实体处理以下方式: @Id @Column(name = “ShortName”) private String shortName; @Column(name = “Id”) private long id; @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinTable(name = “UserLink”, joinColumns = { @JoinColumn(name = “ParentId”, referencedColumnName = “Id”) }, inverseJoinColumns = { @JoinColumn(name = “ChildId”, referencedColumnName = “Id”) }) private Collection children; 由于User实体中的键位于ShortName字段上,因此我必须将“Id”指定为引用的列名称param。 如果我不这样做,它将ShortName作为键,不会获取任何数据。 当我尝试按照上面显示的方式执行此操作时,我得到以下exception: […]
我有以下表格 Trainingplan TrainingplanID int(11) AI PK Trainer int(11) Client int(11) validFrom date validTo date type int(11) TrainingplanExercises trainingplan int(11) PK exercise int(11) PK parameter int(11) PK value varchar(45) 不,我在使用Hibernate连接时遇到问题。 我做了以下:包豆; @Entity @Table(name = “Trainingplan”) public class Training { private IntegerProperty id; private ObjectProperty client; private ObjectProperty trainer; private ObjectProperty validFrom; private ObjectProperty validTo; private ObjectProperty […]
我可以懒惰加载一对多和多对一的关联,但我不能与多对多关联。 我们有一个城市,我们有商人有地址。 商家可以拥有多个地址,多个商家可以拥有相同的地址。 当我们用get获取商家时, Merchant merchant = (Merchant) hib_session.get(Merchant.class, id); System.out.println(merchant.getName()); 没关系,在我们遍历它们之前,地址不会加载。 但是当我们加载商家列表时, City city = (City) hib_session.get(City.class, city_name); for(Merchant merchant : city.getMerchants()) { System.out.println(merchant.getName()); } 即使我们没有获取地址,hibernate也会自动加载它们。 这是我的问题的一个例子。 映射: 有任何想法吗 ?
我正在开发一个处理以下两个实体的应用程序: 产品 (我们将其命名为X,Y,Z)和材料 (a,b,c,…)。 众所周知,每种产品都有配方,表明制造该产品需要哪些材料。 例如,为了产生一个X,我们需要2 a,6 c和4 d(X = 2a + 6c + 4d)。 这就是它在数据库表中的反映: Products id INT name VARCHAR … Materials id INT name VARCHAR … Recipes product_id INT material_id INT count INT 第三表中的“计数”字段是相同类型的材料的系数(来自该示例的2,6,4)。 所以我想用这种方式组合Product类: public class Product { … private Map recipe; // How many units of each material we need? … […]
我在Java,Answer和Collaborator中有2个POJO类,处于多对多关系中。 class Answer { @ManyToMany(cascade = CascadeType.ALL) @JoinTable(name = “ANSWERS_COLLABORATORS”, joinColumns = { @JoinColumn(name = “aid”) }, inverseJoinColumns = { @JoinColumn(name = “cid”) }) private Set collaborators = new HashSet(0); } Class Answer有一套Collaborator ,但Collaborator没有一套Answer 。 我需要从Hibernate CriteriaQuery做的是找到id给出的答案的协作者。 我已经使用结果转换器使用Hibernate Criteria ( org.hibernate.Criteria )完成了这项工作,但是在使用CriteriaQuery时我遇到了CriteriaQuery ,因为我没有给出连接的答案列表。
我有两个表与多对多关联。 – 数据库片段: 负载 ID 名称 会议 ID 日期 sessionsloads LoadId SESSIONID – Hibernate映射片段: /* loads.hbm.xml */ … /* sessions.hbm.xml */ 为了从关联表sessionsloads中删除一个条目,我执行以下代码: Session session = sessionDao.getObject(sessionId); Load load = loadDao.getObject(loadId); load.getSessions().remove(session); loadDao.saveObject(load); 但是,启动后,此代码不会改变任何内容。 删除关联的正确方法是什么?
我有实体A和B,A可以有B的集合.B的相同实例可以属于几个A.所以这里有经典的多对多关系。 在GAE中,没有多对多关系的直接支持,相反,它们提供了使用密钥集来进行相关关系的能力。 所以在AI中将维护B中的记录键集。 现在的问题是 – 如何查询属于类型A的给定对象并匹配某些条件的B类对象? 在纯SQL中,我会这样做: select B.* from B inner join A on B.A_ID=A.ID where B.property0=criteria1 and B.property1=criteria2 … and … 但因为我不能做JOIN然后我需要做类似的事情 select B.* from B where B.A_ID in ( … ) and B.property0=criteria1 and B.property1=criteria2 … and … 因此,由于ID的数量,查询本身可能会很长。 有没有更好的方法?
我从关于无主关系的官方文档中了解到,应用程序必须在关系的任一侧使用多组Key对象。 这很有道理。 然而,来自多年的RDBM风格的编程,我对如何模拟该关系本身的属性感到困惑。 例如,如果我在多对多关系中有实体类别和条目 ,并且希望保留dateAdded属性,或者只有在知道关系的两侧时才相关的其他一些数据。 我想可以创建第三个类: CategoryEntry链接两个,但这看起来像一个kludge。 对这种情况进行建模的建议方法是什么?
我有一个表订单 ,其中包含产品列表。 对于与特定订单相对应的每个产品 ,我需要存储一个地址列表,其中应将单个产品(按产品每个订单)交付给 +—————-+————+ | Order_ID | Product_ID | +—————-+————+ | 1 | 1000 | | 2 | 1000 | | 2 | 1001 | +—————-+————+ 所以我有这个表在订单和产品上的多对多我需要的是将上表中的每个条目映射到地址列表。 所以我需要类似的东西 |PK|Order_ID |Product_ID | | 1| 1 | 1000 | | 2| 2 | 1000 | | 3| 2 | 1001 | 并将上表中的条目映射到地址列表我需要上面的PK和地址ID(我的地址表的主键)上的另外多个表 |PK_Order_Product |Address_ID| | 1 […]
我的实体中有多对多的双向关系。 请参阅以下示例: public class Collaboration { @JsonManagedReference(“COLLABORATION_TAG”) private Set tags; } public class Tag { @JsonBackReference(“COLLABORATION_TAG”) private Set collaborations; } 当我尝试将其序列化为JSON时,我遇到以下exception:` “java.lang.IllegalArgumentException:无法处理托管/后向引用’COLLABORATION_TAG’:后引用类型(java.util.Set)与托管类型(foo.Collaboration)不兼容。 实际上,我知道这是有道理的,因为javadoc明确声明你不能在集合上使用@JsonBackReference。 我的问题是,我应该如何解决这个问题? 我现在所做的是删除父端的@JsonManagedReference注释,并在子端添加@JsonIgnore。 有人能告诉我这种方法有什么副作用吗? 还有其他建议吗?