【发布时间】:2015-04-10 11:48:41
【问题描述】:
我有一个用户类,其主键 (id) 对应于 SQL Server 数据库中的“用户”表。我的 User 类与 Project Entity 具有多对一的关系。
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@JoinColumn(name = "project", referencedColumnName = "id_project")
@ManyToOne(optional = false)
private Project project;
}
数据库:
CREATE TABLE [dbo].[user](
[id] [int] IDENTITY(27,1) NOT NULL,
[name] [varchar](45) NULL,
[project] [int] NOT NULL,
CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED
(
[id] ASC)
现在在我的数据库中,我需要有两行具有相同用户 ID 但不同项目的行,因此我将主键更改为用户表中的复合主键。
user table: id name id_project
---------------------------
1 John 5
1 John 6
project table: id name
---------------
5 Project5
6 Project6
像这样改变我的桌子
CREATE TABLE [dbo].[user](
[id] [int] IDENTITY(27,1) NOT NULL,
[name] [varchar](45) NULL,
[project] [int] NOT NULL,
CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED
(
[id] ASC,
[project_mode] ASC)
我的问题是:我的表格中是否需要执行此步骤?如果是,那么我该如何更改我的 User 类的 @id?
【问题讨论】:
-
这对我来说没有意义,因为当您搜索特定的“用户”时,您会期待什么?如果您将 User 表标准化为单独的 User 和 User_projects 关系表,该表会不会更有意义?那么这将是用户和项目之间的简单 M:M 关系。排序在单个用户表的情况下不起作用,因为它应该防止重复使用 ID 值 - 具有两个项目的用户“John”将分配两个唯一的 ID。
标签: java sql-server jpa eclipselink many-to-one