如何在Hibernate中对子表设置条件
我有一个实体如何在Hibernate中对子表设置条件,hibernate,Hibernate,我有一个实体UserCredentials,它包含在另外两个实体MobileUser和Owner中 UserCredentials有一个SESSION\u ID应该返回我UserCredentials.ID,这样我就可以对MobileUser和/或所有者设置约束,比如: get owner where owner.userCredentials.id == userCredentials.getIdBySessionId(sessionId) 但我被困在这里: private
UserCredentials
,它包含在另外两个实体MobileUser
和Owner
中
UserCredentials
有一个SESSION\u ID
应该返回我UserCredentials.ID
,这样我就可以对MobileUser
和/或所有者设置约束,比如:
get owner
where
owner.userCredentials.id == userCredentials.getIdBySessionId(sessionId)
但我被困在这里:
private long getOwnerId(Session session) throws NotFoundException {
HttpServletRequest httpRequest = getThreadLocalRequest();
String sessionId = httpRequest.getSession().getId();
if(session.getTransaction().isActive() == false) {
session.beginTransaction();
}
Criteria cr = session.createCriteria(UserCredentials.class);
// HOW TO DO SOMETHING LIKE DESCRIBED ABOVE?
@SuppressWarnings("unchecked")
List<UserCredentials> credentials = cr.list();
if(credentials.isEmpty()) {
throw new NotFoundException("Session id not found: " + sessionId);
}
logger.log(Level.DEBUG, "Retrieving owner id of userId: " + credentials.get(0).getUserId());
return credentials.get(0).getId();
}
UserCredentials.java
@Entity
@Table(name = "owner")
public class Owner implements Serializable {
private static final long serialVersionUID = 5932700164951552452L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@NotNull
@OneToOne(cascade = CascadeType.PERSIST)
private UserCredentials userCredentials;
// ...
}
@Entity
@Table(name="user_credentials",
uniqueConstraints = { @UniqueConstraint(columnNames = { "USER_ID" })
, @UniqueConstraint(columnNames = { "SESSION_ID" })})
public class UserCredentials extends AbstractTimestampEntity implements Serializable {
private static final long serialVersionUID = -1749547554922053458L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name="SESSION_ID")
private String sessionId;
}