Я пытаюсь работать с @EmbeddedId, это мой код следующим образом:
create table TBL_EMPLOYEE_002(
ID integer generated always as identity (start with 100,increment by 10),
COUNTRY varchar(50),
NAME varchar(50),
constraint PK_EMP_00240 primary key(ID,COUNTRY)
)
Класс Embedded следующим образом:
@Embeddable
public class EmployeeIdTwo implements Serializable{
public EmployeeIdTwo(){}
public EmployeeIdTwo(String country){
this.empCountry = country;
}
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private Integer employeeId;
@Column(name="COUNTRY",length=50)
private String empCountry;
// implementation of hashCode and equals and only getters
...
}
Сущность-сотрудник, как указано ниже,
@Entity
@Table(name="TBL_EMPLOYEE_002")
public class EmployeeEntitySix implements Serializable{
public EmployeeEntitySix(){}
public EmployeeEntitySix(EmployeeIdTwo id,String name){
this.id = id;
this.employeeName = name;
}
@EmbeddedId
private EmployeeIdTwo id;
@Column(name="NAME")
private String employeeName;
// getters and setters
}
Это код, написанный в основном методе,
private static void storVal(EntityManager em){
EmployeeEntitySix employee = new EmployeeEntitySix(new EmployeeIdTwo("KENYA"), "Henry Olaanga");
em.persist(employee);
}
Но как только я запускаю приведенный выше код, я получаю исключение следующим образом:
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Attempt to modify an identity column 'ID'.
Не могли бы вы сообщить мне, где я ошибаюсь, если мой класс EmbeddedId содержит автоматически сгенерированный столбец, чем должен быть подход.
Просто чтобы знать, что я использую спящий режим в качестве поставщика сохраняемости и JPA в качестве API сохранения состояния.
1 ответ
Я предполагаю, что вы бы не задавали этот вопрос, если бы Id
мог легко и однозначно идентифицировать сотрудника. Если у вас есть возможность изменять свои таблицы, я бы предложил либо сделать Id
надежно уникальным, либо добавить автоматически сгенерированный столбец UniqueId
.
Некоторые из этих ошибок на самом деле происходят из схемы БД, а не из JPA / Hibernate. Если вы пытаетесь обновить столбец, для которого у БД нет стратегии генерации, это может быть причиной вашей ошибки.
Вы также можете взглянуть на идентификатор автоинкремента не отражает в составном ключе с использованием JPA, поскольку я думаю, что это охватывает то, о чем вы спрашиваете.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.