标签: composite-id

JPA - Criteria API和EmbeddedId

我想使用条件来进行以下查询.我有一个实体EmbeddedId定义:

 @Entity
 @Table(name="TB_INTERFASES")
 public class Interfase implements Serializable {

  @EmbeddedId
  private InterfaseId id;
 }

 @Embeddable
 public class InterfaseId implements Serializable {
  @Column(name="CLASE")
  private String clase;
 }
Run Code Online (Sandbox Code Playgroud)

我想要做的标准查询是:

 CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
 CriteriaQuery<Interfase> criteriaQuery = criteriaBuilder.createQuery(Interfase.class);
 Root<Interfase> entity = criteriaQuery.from(Interfase.class);
 criteriaQuery.where(
   criteriaBuilder.equal(entity.get("clase"), "Clase"),
 );
Run Code Online (Sandbox Code Playgroud)

但是这会抛出IllegalArgumentException:

java.lang.IllegalArgumentException: Not an managed type: class InterfaseId
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个问题:

 Root<Interfase> entity = criteriaQuery.from(Interfase.class);
 criteriaQuery.where(
   criteriaBuilder.equal(entity.get("id").get("clase"), "Clase"),
 );
Run Code Online (Sandbox Code Playgroud)

而且这个......

 Root<Interfase> entity = criteriaQuery.from(Interfase.class);
 criteriaQuery.where(
   criteriaBuilder.equal(entity.get("id.clase", "Clase"),
 );
Run Code Online (Sandbox Code Playgroud)

没有运气.所以我的问题是,当我的类使用Embedded和EmbeddedId注释时,如何使用条件进行查询?

谢谢!.毛罗.

jpa composite-id criteria-api jpa-2.0

27
推荐指数
1
解决办法
3万
查看次数

使用NHibernate进行复合键/ Id映射

我的数据库中有以下表格:

Announcements:
- AnnouncementID (PK)
- Title

AnouncementsRead (composite PK on AnnouncementID and UserID):
- AnnouncementID (PK)
- UserID (PK)
- DateRead

Users:
- UserID (PK)
- UserName
Run Code Online (Sandbox Code Playgroud)

通常我会使用多对多关系映射"AnnouncementsRead",但此表还有一个额外的"DateRead"字段.

到目前为止,我已经定义了以下实体:

    public class Announcement
    {
        public virtual int AnnouncementID { get; set; }
        public virtual string Title { get; set; }
        public virtual IList<AnnouncementRead> AnnouncementsRead { get; private set; }

        public Announcement()
        {
            AnnouncementsRead = new List<AnnouncementRead>();
        }
    }

    public class AnnouncementRead
    {
        public virtual Announcement Announcement { get; set; } …
Run Code Online (Sandbox Code Playgroud)

nhibernate composite-key nhibernate-mapping fluent-nhibernate composite-id

18
推荐指数
1
解决办法
3万
查看次数

NHibernate导航器映射到复合键问题的一部分 - 遗留数据库使用

我们有一个我们无法改变的遗留数据库.我们正试图转移到NHibernate而不是旧的DataAccess层,这是一个垃圾,而且速度太慢.

它有这样的表:

GPI表有(PU_ID,PAR_ID,Data,Data2)列
BLOCK表有(GA_ID,Data,PAR_ID)列
COMPANY表有(PU_ID,Data)列

我为上面的表创建了这些映射:

GPI

<class name="GroupPartnerInterest" table="[GPI]">
    <composite-id >
        <key-property name="GroupId" column="PAR_ID" />
        <key-property name="CompanyId" column="PU_ID" />
    </composite-id>
    <property name="data" column="Data"/>
    <property name="data2" column="Data2"/>
    <many-to-one name="Company" fetch="select" cascade="none">
        <column name="PU_ID"/>
    </many-to-one>
    <set name="Blocks" cascade="none" inverse="true" fetch="select">
        <key property-ref="GroupId">
            <column name="PAR_ID"/>
        </key>
        <one-to-many class="Block"/>
    </set>
</class>
Run Code Online (Sandbox Code Playgroud)

<class name="Block" table="[BLOCK]" >
    <id name="BlockId" column="GA_ID" >
        <generator class="assigned"/>
    </id>
    <property name="data" column="Data"/>
    <property name="GroupId" column="PAR_ID"/>
    <set name="GroupPartnerInterests" cascade="all-delete-orphan" fetch="select">
        <key property-ref="GroupId">
            <column name="PAR_ID"/>
        </key>
        <one-to-many class="GroupPartnerInterest"/>
    </set>
</class>
Run Code Online (Sandbox Code Playgroud)

公司 …

nhibernate nhibernate-mapping legacy-database composite-id

6
推荐指数
1
解决办法
1635
查看次数

JPA/Hibernate中的复合键与继承的类

我有一个在我的类结构上定义的复合id,如下所示.不幸的是,我总是得到一个hibernate错误,抱怨未找到"part2":

"在实体MoreClass:part2中找不到@IdClass的属性"

任何人都可以帮我解决问题吗?(或者至少指出一个有用的jpa/hibernate doc?)

@IdClass(ClassKey.class)
@Entity
public class MoreClass extends LessClass implements Serializable
{
  @Id
  String part1;
}

@MappedSuperclass
public class LessClass implements Serializable
{
   @Id
   String part2;
}

public class ClassKey implements Serializable
{
   String part1;
   String part2;
}
Run Code Online (Sandbox Code Playgroud)

hibernate jpa composite-id composite-primary-key

6
推荐指数
1
解决办法
3020
查看次数

JPA复合键可为空的列

我正在使用Hibernate的JPA impl对某些表进行建模。我在映射表时遇到了麻烦:

  • 没有主键
  • 在4列上具有唯一索引,其中3列可以为空

我试图破解它并将索引定义为复合ID,但是由于某些列可为空,因此无法正常工作。JPA / Hibernate有可能吗?

谢谢

java hibernate jpa composite-id

5
推荐指数
1
解决办法
1万
查看次数

使用NHibernate插入带有复合键的记录

我正在使用使用复合键的旧数据库.我正在尝试使用NHibernate将新记录插入数据库.NHibernate指定我必须手动创建Id,但是当我尝试使用此id插入时,我收到消息:

System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'tablename' when IDENTITY_INSERT is set to OFF.
Run Code Online (Sandbox Code Playgroud)

我无法触及任何数据库设置,因为它们由美国总部管理.

我发现我可以通过以下方式进行数据库插入:

insert into tablename (tablename_country_id, /*extra fields here*/) values (16, /*extra values here*/)
Run Code Online (Sandbox Code Playgroud)

并且tablename_id列自动递增.

是否可以编写某种处理程序,允许我ID使用该CountryId集创建一个对象并让它自动增加该Id属性.

干杯.


示例代码:

表定义:

CREATE TABLE [dbo].[tablename](
    [tablename_country_id] [int] NOT NULL,
    [tablename_id] [int] IDENTITY(1,1) NOT NULL,

    -- more fields here

    CONSTRAINT [pk_tablename] PRIMARY KEY
    (
        [tablename_country_id] ASC,
        [tablename_id] ASC
    )
)
Run Code Online (Sandbox Code Playgroud)

类文件:

public class ModelObject
{
    public ID { …
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate composite-id

5
推荐指数
1
解决办法
6070
查看次数

当嵌入的键包含 SQL Server 上的标识列时,休眠插入失败

我正在尝试使用休眠映射实体,但是使用 SQL Server,我无法继续。

以下是详细信息。

SQL Server 实体

CREATE TABLE [dbo].[BOOK_EMBEDDED](

[row_id] [bigint] IDENTITY(1,1) NOT NULL,

[group_no] [int] NOT NULL,

[book_name] [varchar](255) NULL,

 CONSTRAINT [PK_BOOK_EMBEDDED] PRIMARY KEY CLUSTERED 

(

[group_no] ASC,

[row_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

==============================

嵌入式密钥

---------------------------

@Embeddable 

public class EmbeddedKey implements Serializable { 


    private static final long serialVersionUID = 1L; 



    @GeneratedValue(strategy = GenerationType.IDENTITY) 

    @Column(name = "row_id") 

    private Long rowId; 



    @Column(name …
Run Code Online (Sandbox Code Playgroud)

java sql-server hibernate jpa composite-id

5
推荐指数
1
解决办法
3062
查看次数

key-many-to-one和key-property关联:nhibernate不会从set中删除项目

我会尽量保持这种简洁,但希望不要错过任何重要信息.我相信的代码提供了所有细节,但我遗漏了噪音(这是VB,所以有很多噪音:)).

"Case"对象有许多"赋值":

Public Class Case
  Property CaseId As Guid 
  Property Assignments As ISet(Of CaseAssignment)
End Class

Public Class CaseAssignment
  Property Case As Case
  Property RoleId As Guid
End Class
Run Code Online (Sandbox Code Playgroud)

我已经交过的数据模型看起来与你期望的一样,除了CaseAssignment是一个复合键:

table Case
   CaseId uniqueid not null primary key
   ...

table CaseAssignment
   CaseId uniqueid not null
   RoleId uniqueid not null
   PK := (CaseId, RoleId)
   FK from CaseId -> Case.CaseId
Run Code Online (Sandbox Code Playgroud)

最后,Fluent NHibernate映射:

Class CaseMapping
  Public Sub New()
    Table("Case")
    KeyColumn("CaseId")
    HasMany(Function(x) x.Assignments).KeyColumn("CaseId").Cascade.AllDeleteOrphan()
End Class

Class CaseAssignmentMapping
  Public Sub New()
    Table("CaseAssignment")
    CompositeId() _
      .KeyReference(Function(x) …
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent-nhibernate composite-id

4
推荐指数
1
解决办法
3031
查看次数

流畅的NHibernate compositeid到映射类

我正在试图弄清楚如何使用CompositeId来映射另一个类.这是一个测试用例:

表格:

TestParent:
  TestParentId (PK)
  FavoriteColor

TestChild:
  TestParentId (PK)
  ChildName (PK)
  Age
Run Code Online (Sandbox Code Playgroud)

C#中的类:

public class TestParent
{
    public TestParent()
    {
        TestChildList = new List<TestChild>();
    }

    public virtual int TestParentId { get; set; }
    public virtual string FavoriteColor { get; set; }
    public virtual IList<TestChild> TestChildList { get; set; }
}

public class TestChild
{
    public virtual TestParent Parent { get; set; }
    public virtual string ChildName { get; set; }
    public virtual int Age { get; set; }

    public override …
Run Code Online (Sandbox Code Playgroud)

mapping nhibernate nhibernate-mapping fluent-nhibernate composite-id

3
推荐指数
1
解决办法
8679
查看次数

流利的Nhibernate 3映射复合字段(自定义类型)

好吧,我的情景

public class Permission
{
    public virtual Function Function { get; set; }
    public virtual Profile Profile { get; set; }
}

public class MapPermission : ClassMap<Permission>
{
    public MapPermission()
    {
        Table("Permissions".ToUpper());
        CompositeId().KeyProperty(x => x.Function, "FunctionID").KeyProperty(x => x.Profile, "ProfileID");

    }
}
Run Code Online (Sandbox Code Playgroud)

其中Function AND Profile是两个简单映射的实体.当我运行我有这个错误:

无法确定类型:Data.Model.Entities.Function,Data.Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null,对于列:NHibernate.Mapping.Column(FunctionID)"}

有办法避免这种情况吗?最终我需要创建一个由两个自定义映射类构成的CompositeID类.如果我将compositeID与int字段一起使用,它就像魅力一样

提前致谢

功能(如配置文件)映射

public class Function
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
}

public class MapFunction : ClassMap<Function> …
Run Code Online (Sandbox Code Playgroud)

fluent-nhibernate composite-id custom-type

1
推荐指数
1
解决办法
1232
查看次数