1

我正在使用 Hibernate 调用存储过程

Response returned by Stored procedure 


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

休眠@EntityClass

 @Entity
 public class receieverDetails {

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

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

private String source;

 }

我从数据库中获取receiverDetails 列表

如果列表包含重复的receiverId,如上面的响应所示,第一个正在替换第四个详细信息

绑定代码

     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 注释引起的,因为它只发生在相同的接收器ID 上

请帮助我

4

1 回答 1

1

在您的代码中,通过向@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=truein@Column@UniqueConstraint(columnNames = {"receiverId"}其他特定约束的快捷方式。@GeneratedValue注解是配置指定列(字段)的增量方式。

或者如果表的主键是表中的其他字段,请更正代码以反映相同。

于 2019-10-15T06:37:22.273 回答