Entity创建Primary Key的方法

本文介绍EJB实体Bean中PrimaryKey的创建方法,包括通过主键类和嵌入式ID实现联合PrimaryKey,以及使用ROWID的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于EJB的实体Bean来说,最重要的一个方面便是Primary Key,因为,对于实体来说,每一条记录都是一个对象,必须要有一个唯一标识来获得这个对象,然后对该对象做Update 和Remove操作。本文主要讲述如何创建Primary Key。

 

对于表格无主键的创建Primary Key主要有两种方法

1.创建联合Primary Key

(1)通过创建主键类来标注,例子如下:

实体类:Customer.java

主键类 CusomerPK.java

(2) 通过EmbededID来实现

具体方法如:

实体类:Student.java

 

 

StudentID.java

2.通过应用ROWID来实现

在实体类中添加

@Id
private ROWID rowid;

这个方法应该适用于Oracle数据库,但据说在插入记录时,有些问题,不知新的TopLink有无解决该Bug

 

<think>我们正在讨论如何在实体数据模型中将长整型(long integer)设置为主键。 根据数据库设计的一般原则,主键需要满足唯一性和非空性。长整型(在SQL中通常是BIGINT类型)可以作为主键的数据类型。 步骤: 1. 在创建表时,指定主键字段为BIGINT(或其他数据库中对应的长整型类型)并设置为主键。 2. 或者,在已有表中修改字段为主键,但需确保该字段为长整型且满足主键条件(唯一且非空)。 引用[4]中提到了如何添加外键,其语法是类似的。我们可以参考其语法,但这里我们需要设置主键。 示例SQL语句: 创建新表时设置主键: ```sql CREATE TABLE my_table ( id BIGINT PRIMARY KEY, -- 其他字段 ); ``` 或者,如果表已经存在,我们可以修改表结构来添加主键(假设id字段已经是BIGINT类型且没有设置主键): ```sql ALTER TABLE my_table ADD PRIMARY KEY (id); ``` 但是,如果表中已经存在数据,需要确保id字段的值是唯一的且没有空值。 在实体数据模型(如使用ORM框架)中,通常会在实体类中通过注解或配置来指定主键字段及其类型。 例如,在Java的JPA中,可以这样写: ```java @Entity public class MyEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 使用Long类型,对应数据库的BIGINT // 其他字段和方法 } ``` 在C#的Entity Framework中: ```csharp public class MyEntity { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long Id { get; set; } // 其他属性 } ``` 注意:这里使用了自增(Identity)策略,数据库会自动生成唯一的递增长整型值。 如果用户没有使用ORM,而是直接操作数据库,那么就需要在数据库层面设置主键为长整型(如BIGINT)。 根据引用[2]中提到的设计,其中要求“Publications have a unique id”,这里我们可以使用长整型作为主键。 因此,总结如下: 在数据库设计时,将主键字段的数据类型设置为长整型(如BIGINT),并在该字段上设置主键约束。 在实体数据模型中,将对应的属性设置为长整型(如Java中的Long,C#中的long)并标记为主键。 相关问题: 1. 主键使用长整型有什么优缺点? 2. 在分布式系统中如何生成唯一的长整型主键? 3. 除了长整型,还有哪些常用的主键数据类型?</think>### 如何在实体数据模型中将长整型设置为主键 在实体数据模型中设置长整型(Long Integer)作为主键需根据具体技术栈实现,以下是两种常见场景的解决方案: --- #### 1. **数据库层面(SQL语句)** 在数据库表中直接将长整型字段定义为主键: ```sql CREATE TABLE Users ( user_id BIGINT PRIMARY KEY, -- PostgreSQL/SQL Server -- 或 user_id BIGINT AUTO_INCREMENT PRIMARY KEY -- MySQL自增主键 ); -- 已有表添加长整型主键 ALTER TABLE Users ADD COLUMN user_id BIGINT PRIMARY KEY; -- PostgreSQL/SQL Server ``` > **说明**: > - `BIGINT` 是标准SQL的长整型(64位,范围约±9.2e18) > - 自增属性需按数据库语法调整(如MySQL用`AUTO_INCREMENT`,PostgreSQL用`BIGSERIAL`)[^4] --- #### 2. **ORM框架(代码层面)** 通过实体类注解/配置映射长整型主键: ```java // JPA (Java) @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 使用Long类型 } ``` ```csharp // Entity Framework (C#) public class User { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long Id { get; set; } // long对应数据库BIGINT } ``` > **关键点**: > - ORM中需用`Long`(Java)或`long`(C#)类型 > - `@GeneratedValue`或`[DatabaseGenerated]`确保主键自增 > - 引用[2]中的"Publications have a unique id"要求可通过此方式实现 --- #### 注意事项 1. **性能**:长整型主键比字符串主键的索引效率更高(比较/存储更优) 2. **分布式系统**:若需跨节点唯一ID,考虑雪花算法(Snowflake)生成长整型主键 3. **外键关联**:引用长整型主键的表需同步使用`BIGINT`类型(如引用[4]的外键设置) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值