Java Hibernate更新实体不知道主键

Java Hibernate更新实体不知道主键,java,hibernate,jpa,orm,hibernate-criteria,Java,Hibernate,Jpa,Orm,Hibernate Criteria,我有一个美国实体,它的id是主键,userId和ServiceId加在一起也是唯一的。现在我有一个userId和一个serviceId,我想更新一个美国实体,但我不知道使用hibernate进行更新的正确语法。有人能帮我吗。。。 我已将注释用于实体映射: @Id @Column(name = "USERSERVICE_ID") @GeneratedValue private Integer id; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(

我有一个美国实体,它的id是主键,userId和ServiceId加在一起也是唯一的。现在我有一个userId和一个serviceId,我想更新一个美国实体,但我不知道使用hibernate进行更新的正确语法。有人能帮我吗。。。 我已将注释用于实体映射:

@Id
@Column(name = "USERSERVICE_ID")
@GeneratedValue
private Integer id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "SERVICE_ID")
private Service service;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "SERVICE_SEND_TYPE_ID")
private ServiceSendType serviceSendType;

@Column(name = "USERSERVICE_LASTSENT")
private String lastSentValue = "";

@Column(name = "USERSERVICE_UNSUBCTIMESTAMP")
private Date unsubscribeDate;

@Column(name = "USERSERVICE_SUBCTIMESTAMP")
private Date subscribeDate;

@Column(name = "USERSERVICE_ENABLED")
private Boolean enabled = false;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "SERVICE_USER_ID")
private User user;
试试这个:

US entity = (US) session.createQuery("select s from US u where u.service.id = :serviceId and u.user.id = :userId")
.setParameter("serviceId", serviceId)
.setParameter("userId", userId)
.uniqueResult();
//update
entity.setEnabled(true); 

就这样。从DB加载实体后,它会自动附加到当前会话,因此将检测到任何更改。

您能提供要映射的类的代码吗?好的,但我已经映射了实体,并且它可以与其他hibernate函数一起正常工作。我只想使用这两个值(userId,serviceId)而不是主键(id)来更新一个entityYou sholud使用复合主键。请在这里阅读”