Я разрабатываю приложение для начальной загрузки (jpa ... и т. Д.), И я застрял в одной проблеме. Я использую атрибут UUID для первичных ключей. Когда я пытаюсь создать объект как внешний ключ, jpa не может правильно привести объект к моему объекту.
Решение
My UserEntity
@Entity(name = "User")
@Table(name = "USR")
@EntityListeners(UserPersistListener.class)
@EqualsAndHashCode
public class UserEntity {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "ID", updatable = false)
@Getter
@Setter
private UUID id;
@Column(name = "LOGIN", updatable = false)
@Getter
@Setter
private String login;
@Column(name = "PASS")
@Getter
@Setter
private String pass;
@Enumerated(EnumType.STRING)
@Column(name = "ROLE")
@Getter
@Setter
private Role role;
}
Моя другая сущность, использующая UserEntity (внешний ключ)
@Entity(name = "Person")
@Table(name = "PERSON")
@EqualsAndHashCode
public class PersonEntity {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "ID", updatable = false)
@Getter
@Setter
private UUID id;
@Column(name = "NAME")
@Getter
@Setter
private String name;
@Column(name = "SUBSCRIPTION")
@Getter
@Setter
private Long subscription;
@Enumerated(EnumType.STRING)
@Column(name = "SUBSCRIPTION_TYPE")
@Getter
@Setter
private SubscriptionType subscriptionType;
@Column(name = "PHONE1")
@Getter
@Setter
private Long phone1;
@Column(name = "PHONE2")
@Getter
@Setter
private Long phone2;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "CREATED_BY", referencedColumnName = "ID", updatable = false)
@Getter
@Setter
private UserEntity createdBy;
@Convert(converter = LocalDateAttributeConverter.class)
@Column(name = "CREATION_DATE")
@Getter
@Setter
private LocalDateTime creationDate;
}
Исключение
org.springframework.data.domain.PageImpl["content"]->java.util.Collections$UnmodifiableRandomAccessList[0]->br.com.orangesun.entity.person.PersonEntity["createdBy"]->br.com.orangesun.entity.user.UserEntity_$$_jvst424_1["id"])
2019-06-18 00:52:55.163 WARN 15432 --- [nio-8099-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42883
2019-06-18 00:52:55.164 ERROR 15432 --- [nio-8099-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: operator does not exist: uuid = character varying
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
EDIT
Определение моей базы данных
| Field Name | Type |
|-----------------------------|
| id | uuid |
| name | varchar |
| subscription | int8 |
| subscription_type | varchar |
| created_by | uuid |
| creation_date | instant |
| phone1 | int8 |
| phone2 | int8 |
|-----------------------------|
РЕДАКТИРОВАТЬ 2
Другие подробности об этой же ошибке
java.lang.IllegalArgumentException: Provided id of the wrong type for class br.com.orangesun.entity.person.PersonEntity. Expected: class java.lang.String, got class java.util.UUID