@Id аннотация вызывает дублирование в списке - PullRequest
1 голос
/ 15 октября 2019

Я использую Hibernate для вызова Хранимой процедуры

Response returned by Stored procedure 


         receiverId  fcmId    source
           1234        xyz     android
           45678       abc     web
           9876        fgh     android
           1234       ygh     ios

Hibernet @ EntityClass

 @Entity
 public class receieverDetails {

@Id
@Column(name="receiverId")
private String receiverUserId;

@Column(name="fcmId")
private String fcmIds;

private String source;

 }

Я получаю Список receiveDetails из базы данных

, если Список содержит дубликатreceiveId, как показано выше, является ответом, 1-й заменяет 4-е детали

Код для привязки

     ProcedureCall procedureCall1 = 
                       session.createStoredProcedureCall(Strings.StoredProcedureNames.GET_RECEIVER_INFO_OF_SPONSORED_MESSAGE,receieverDetails.class);

   Output output1 = procedureCall1.getOutputs().getCurrent();
                if(output1.isResultSet()) {
    List<receieverDetails> receievers = ((ResultSetOutput) output1).getResultList();
 }

Я думаю, что это вызвано аннотацией @Id в классе сущности, потому что это происходиттолько с теми же получателями

Пожалуйста, помогите мне в этом

1 Ответ

1 голос
/ 15 октября 2019

В своем коде, предоставив аннотацию @Id к столбцу receiverId, вы сообщаете коду, что это поле должно использоваться в качестве первичного ключа для таблицы. Так, при извлечении данных проблема возникает какв этом столбце есть повторяющиеся значения. Либо вам нужно правильно установить первичный ключ, либо сделать этот столбец первичным ключом в таблице и исправить свой код. Если вы используете один и тот же класс сущности для сохранения данных и создания первичного ключа столбца receiverId, попробуйте использовать следующее:

@Entity
public class receieverDetails {

@Id
@Column(name="receiverId",unique=true,nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private String receiverUserId;

@Column(name="fcmId")
private String fcmIds;

private String source;

}

unique=true в @Column - это сокращение для @UniqueConstraint(columnNames = {"receiverId"} и другихОсобые ограничения. Аннотация @GeneratedValue предназначена для настройки пути приращения указанного столбца (поля).

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

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