我有一个仅包含2个字段的表。该表具有由这两个字段形成的复合PK。
使用Netbeans从数据库创建实体bean时,不会像其他具有两个以上字段的表那样自动创建实体bean。
所以我想我需要自己创建实体bean。创建此实体bean的最佳实践是什么?是否必须包含COMPOSITE KEY
对象?
我不使用NetBeans,因此我不能说任何有关其映射工具的信息。
要映射组合键,有两个选项。您可以
@Embeddable
用PK字段定义一个单独的对象,并像@EmbeddedId
在@Entity
课堂上一样使用它 @Embeddable
public class MyCompositePK {
@Column
private String fieldA;
@Column
private String fieldB;
}
@Entity
public class MyBean {
@EmbeddedId
private MyCompositePK id;
@Column
private String fieldC;
}
@IdClass
中一样使用它@Entity
。 @Entity
@IdClass(value=ClassAB.ClassABId.class)
public class ClassAB implements Serializable {
private String idA;
private String idB;
@Id
@Column(name="ID_A")
public String getIdA(){ return idA; }
public void setIdA(String idA){ this.idA = idA; }
@Id
@Column(name="ID_B")
public String getIdB(){ return idB; }
public void setIdB(String idB){ this.idB = idB; }
static class ClassABId implements Serializable {
private String idA;
private String idB;
public String getIdA(){ return idA; }
public void setIdA(String idA){ this.idA = idA; }
public String getIdB(){ return idB; }
public void setIdB(String idB){ this.idB = idB; }
// implement equals(), hashcode()
}
}
在此示例ClassABId
中,为方便起见,使用了一个静态内部类。
Pascal
Thivent对以下问题的出色回答也解释了这些选项:如何使用Hibernate映射组合键?。
这个相关问题讨论了这些方法之间的差异:我应该使用哪种注释:@IdClass或@EmbeddedId。注意,该@IdClass
方法重复了字段的声明。
无论如何,我认为创建两个类没有其他选择。这就是为什么我问这个问题:映射仅包含复合PK而没有@IdClass或@EmbeddedId的类。似乎有一个特定于休眠的功能。
附带说明一下,如果您可以控制数据库结构,则还可以考虑避免使用复合键。这样做有一些原因。
问题是@ManyToOne@Joincolumn ID_REPORT(它是一个主键)和@Joincolumn ID_TEMPLATE_DEFAULT 实体映射中的重复列:CurReport 列:id_report(应使用插入=“false”更新=“false”进行映射) 代码 第一桌CUR_TEMPLATE 第二个表CUR_REPORTS 第一个表CUR_REPORTS实体当前报表 第二个表CUR
问题内容: 只是为了扩展我以前的问题-我的数据库中有两个表,我想提取某些信息。下表: 您向我提供了以下代码来获取播放器的名称: 效果很好,谢谢-我只想进行两项调整: 我想返回得分手的名字以及球员的名字。由于m.scorer是一个ID,如果p.Name已被映射到m.playerID,我如何将其映射到p.Name属性? 上面的查询返回所有玩家的姓名。我很快就会添加搜索功能,您可以在其中搜索特定玩家的所
问题内容: 我正在尝试创建一个标准来从3个表(关联,更新和详细信息)中检索一些对象。详细信息引用了关联和更新,而更新引用了详细信息列表。我的目标是在给定关联ID的情况下,在指定字段中检索至少包含明细且值为空的更新列表。在JPQL中很容易做到,但是客户说必须用标准编码。 我的JPQL是: 我尝试了以下操作,但是它只是返回了数据库中的所有更新: 谁能帮我?我搜索了但找不到3个实体的任何示例。 问题答案
我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用
我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。 背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。 与具有多对多关系,使用称为“和实体。 所以,我有,主键为(,)。本身是的外键。 也有一个字段。我希望(,)是的复合外键。 我的PersonSession代码: } 这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——ar
问题内容: 这是场景: 我有2个数据表,一个是2009年版本,另一个是2010年版本。每个表的主键是组合键。我知道每一行都有不同数量的行,我需要找出差异。 通常,在“常规”主键设置中,我只会在其他表的主键列表中查找主键值。但是我不知道如何使用复合主键(甚至是可能的话)执行此操作。 那么,如何比较这两个表中的行呢? 编辑:更具体地说,我试图找到表之间的 差异 ,而不是共同的行 问题答案: 只需使用基