我有一个映射到现有表的实体类。该表没有主键。这是表格:
CREATE TABLE [dbo].[testtable](
[field1] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[field2] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[field3] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[field4] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[field5] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[field6] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
我无法对此表做任何更改,我试图通过仅在内存中设置主键来找到使用jpa的方法。我在理论上知道,如果我想在内存中只有列,我可以使用瞬态注释。我想将field1, field2, field3
设置为指向现有数据库字段的瞬态主键。类似指针的东西,以便能够获取现有字段的值。这个可能吗?
这是实体类:
@Entity
@Table(name = "testtable")
public class TestJPA implements Serializable
{
@Column(name = "field1")
private String field1;
@Column(name = "field2")
private String field2;
@Column(name = "field3")
private String field3;
@Column(name = "field4")
private String field4;
@Column(name = "field5")
private String field5;
@Column(name = "field6")
private String field6;
}
答案 0 :(得分:1)
如果是暂时的,则不会映射到DB。
在DB中没有定义主键的事实并没有阻止你在JPA中使用它,在这种情况下DB只是没有强制执行唯一约束。
你需要它是JPA中的复合主键,它由field1到field3组成。
但只有当你总是希望将这3个字段视为你所谓的“瞬态主键”时,这才有效。
答案 1 :(得分:1)
是肯定的。 field1 field2和field3可以唯一地标识记录
在这种情况下,请考虑使用@EmbeddedId作为复合PK。
编辑:超链接已更新
每个JPA实体必须具有唯一标识它的主键 来自其他实例。主键(或包含在其中的字段) 复杂的主键)必须是持久字段。