Использование Entity без ID - PullRequest
0 голосов
/ 25 июня 2019

У меня есть таблица в базе данных SQL, в которой есть повторяющиеся записи (что означает, что я не могу создать составной ключ) и нет первичного ключа.

Я хочу иметь возможность получать все записи, которые соответствуют определенному столбцу accountRef.

Короче говоря, я хотел бы выполнить следующий запрос:

SELECT * from table where accountRef='xyz'

, где 'xyz' будет вводом пользователя.

Проблема, с которой я сталкиваюсь, заключается в том, что использование @Entity не позволяет мне не указывать идентификаторы.Есть ли способ, которым я могу обойти это?Вот мой код BasicAccountAudit.java

@XmlRootElement
@Entity
//@Embeddable
@Table(name = "tb_Account_History", schema="dbo")
public class BasicAccountAudit implements Serializable{


private String accountRef;
private String client;

//getters and setters

BasicAccountAuditRepository.java

@Repository
public interface BasicAccountAuditRepository extends CrudRepository<BasicAccountAudit, Integer> {

    List<BasicAccountAudit> findAll();

    List<BasicAccountAudit> findByAccountRef(String accountRef);
}

Что я пробовал

Я пытался использовать @Embeddableно это дает мне эту ошибку:

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем 'basicAccountController': неудовлетворительная зависимость, выраженная через метод 'setBasicAccountDao' параметр 0;вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем 'basicAccountDaoImpl': неудовлетворительная зависимость, выраженная через метод 'setBasicAccountAuditRepository', параметр 0;вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем BasicAccountAuditRepository: сбой вызова метода init;вложенным исключением является java.lang.IllegalArgumentException: не управляемый тип:

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Вам нужен идентификатор для создания объекта.Это так просто.Однако вы можете просто создать идентификатор автоинкремента и игнорировать его.Возможно, вам это не нужно, но это необходимо для JPA.Другой вариант, если вы уже определили идентификатор, - это установить UUID в качестве вашего идентификатора и автоматически его сгенерировать.В этом случае вам не нужно беспокоиться о значении, и нет никакого порядка для него, кроме как предоставить идентификатор для хранилища и сущности.

Этот является ответом, который реализует UUID, который работает с использованием Hibernate 4 и Spring.

Что касается вашего примера для получения списка информации, основанной на пользовательском вводе,Вы можете определить хранилище или EntityManager и написать скрипт самостоятельно.Получите ввод от пользователя и добавьте его в запрос, затем выполните его, возвращая результаты.Это довольно просто сделать.Вы можете проверить здесь для EntityManager и здесь для репозитория.

Но краткий ответ на ваш вопрос - сделать случайный идентификатор первичного ключа, который вам не нужендаже если данные могут иметь дубликаты.

0 голосов
/ 25 июня 2019

Вы должны использовать либо простой первичный ключ, либо композитный ключ в JPA, и всегда рекомендуется PK, без ORM. Если вы хотите сериализовать сущность в XML (аннотации @XmlRootElement предлагают это) без идентификатора, вы можете использовать аннотацию @XmlTransient в поле id, или лучше создать объект передачи и сопоставить только те свойства, которые вам нужны сериализации. Mapstuct - хороший выбор, чтобы упростить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...