Мне нужно сопоставить составной PK с JPA в БД Oracle.
Я следовал за другими вопросами SO в связи с этим учебным пособием , но я все еще получаю следующую ошибку:
java.sql.SQLSyntaxErrorException: ORA-00904: "COMPOSITEI0_"."NAME_1": Invalid Identifier
(где NAME_1 относится к имени одного из столбцов, являющихся частью PK)
Это моя сущность (реальные имена не упомянуты в целях защиты данных):
@Entity
@Table(schema = "SCHEMA", name = "TABLE")
public class CompositeIdEntity {
@Column(name = "NAME1")
private String name1;
@Column(name = "NAME2")
private String name2;
@Column(name = "NAME3")
private String name3;
@EmbeddedId
CompositePrimaryKeyTableEmbeddable id;
public CompositePrimaryKeyTableEmbeddable getId() {
return this.id;
}
public void setId(CompositePrimaryKeyTableEmbeddable id) {
this.id = id;
}
// other getters and setters
Мой класс идентификатора @Embeddable:
@Embeddable
public class CompositePrimaryKeyTableEmbeddable implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Column(name="name1")
private String name1;
@Column(name="name2")
private String name2;
public CompositePrimaryKeyTableEmbeddable() {
super();
}
public CompositePrimaryKeyTableEmbeddable(String name1, String name2) {
this.name1 = name1;
this.name2 = name2;
}
Мой @Repository:
@Repository
public interface CompositeIdDao extends JpaRepository<CompositeIdEntity, CompositePrimaryKeyTableEmbeddable> {
}
И, наконец, вызов БД, которая возвращает только ноль, потому что этопросто тест, чтобы увидеть, все ли работает вместе:
public CompositeIdEto saveCompositeId() {
CompositeIdEntity compositeIdEto = new CompositeIdEntity();
compositeIdEto.setname3("New");
compositeIdEto.setId(new CompositePrimaryKeyTableEmbeddable("ERR", "ER"));
this.compositeIdDao.save(compositeIdEto);
return null;
}