У меня есть класс сущности, сопоставленный с существующей таблицей. В этой таблице нет первичного ключа. Вот таблица:
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
в качестве переходного первичного ключа, который укажет на существующие поля базы данных. Что-то вроде указателя inorder, чтобы иметь возможность получать значения существующих полей. Это возможно?
Вот класс сущностей:
@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;
}
да. поле1 поле2 и поле3 могут однозначно идентифицировать запись
В этом случае рассмотрим использование @EmbeddedId для составного PK.
EDIT: обновлена гиперссылка
Согласно спецификации Oracle:
Каждый объект JPA должен иметь первичный ключ, который однозначно идентифицирует его из других экземпляров. Первичный ключ (или поля, содержащиеся в сложном первичном ключе) должны быть постоянными.
@EmbeddedId
на @Id
, попробуйте это
Если он временный, чем он не сопоставляется с БД.
Тот факт, что первичный ключ, определенный в БД, не мешает вам использовать его в JPA, DB просто не применяет в этом случае уникальные ограничения.
Что вам нужно, это составной первичный ключ в JPA, который состоит из поля 1 в поле3.
Но это будет работать только в том случае, если вы всегда хотите рассматривать эти 3 поля как ваш "переходный первичный ключ", как вы его называете.