JPA - Создать временный первичный ключ

1

У меня есть класс сущности, сопоставленный с существующей таблицей. В этой таблице нет первичного ключа. Вот таблица:

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; 
}
  • 0
    есть ли какой-либо набор полей в таблице, который однозначно идентифицирует запись?
  • 0
    Ваше заявление о том, что вы не можете использовать JPA без PRIMARYKEY, полностью составлено: en.wikibooks.org/wiki/Java_Persistence/… . Пожалуйста, не высказывайте свои предположения, как будто они были фактом, большое спасибо
Показать ещё 2 комментария
Теги:
sql-server
hibernate
jpa

2 ответа

1
Лучший ответ

да. поле1 поле2 и поле3 могут однозначно идентифицировать запись

В этом случае рассмотрим использование @EmbeddedId для составного PK.

EDIT: обновлена гиперссылка

Согласно спецификации Oracle:

Каждый объект JPA должен иметь первичный ключ, который однозначно идентифицирует его из других экземпляров. Первичный ключ (или поля, содержащиеся в сложном первичном ключе) должны быть постоянными.

  • 0
    большое спасибо. Ваш ответ привел меня к этому примеру. patrickgrimard.com/2011/03/27/...
  • 0
    не знал, что вы можете заменить @EmbeddedId на @Id , попробуйте это
Показать ещё 1 комментарий
1

Если он временный, чем он не сопоставляется с БД.

Тот факт, что первичный ключ, определенный в БД, не мешает вам использовать его в JPA, DB просто не применяет в этом случае уникальные ограничения.

Что вам нужно, это составной первичный ключ в JPA, который состоит из поля 1 в поле3.

Но это будет работать только в том случае, если вы всегда хотите рассматривать эти 3 поля как ваш "переходный первичный ключ", как вы его называете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню