java - 如何使用 Netbeans 的 Rest Web 服务中的 JoinTable 列进行查询

标签 java database rest

我如何执行此查询: @NamedQuery(name = "Scuser.findFriends", query = "从 Scuser s、friends f 中选择 s,其中 f.firstid = :iduser 和 s.iduser = f.secondid")

在本类(class)中:

@Entity
@Table(name = "scuser")
@XmlRootElement
@NamedQueries({
 @NamedQuery(name = "Scuser.findAll", query = "SELECT s FROM Scuser s"),
 @NamedQuery(name = "Scuser.findByIduser", query = "SELECT s FROM Scuser s WHERE s.iduser = :iduser"),
    @NamedQuery(name = "Scuser.findByUpassword", query = "SELECT s FROM Scuser s WHERE s.upassword = :upassword"),
    @NamedQuery(name = "Scuser.findByUname", query = "SELECT s FROM Scuser s WHERE s.uname = :uname"),
    @NamedQuery(name = "Scuser.findByTpoints", query = "SELECT s FROM Scuser s WHERE s.tpoints = :tpoints"),
//    @NamedQuery(name = "Scuser.findFriends", query = "SELECT s FROM Scuser s, friends f WHERE f.firstid = :iduser and s.iduser = f.secondid"),
    @NamedQuery(name = "Scuser.findByUnameUpassword", query = "SELECT s FROM Scuser s WHERE s.uname = :uname and s.upassword = :upassword")})
public class Scuser implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 2147483647)
    @Column(name = "iduser")
    private String iduser;
    @Size(max = 200)
    @Column(name = "upassword")
    private String upassword;
    @Size(max = 200)
    @Column(name = "uname")
    private String uname;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "tpoints")
    private Double tpoints;
    @JoinTable(name = "friends", joinColumns = {
        @JoinColumn(name = "firstid", referencedColumnName = "iduser")}, inverseJoinColumns = {
        @JoinColumn(name = "secondid", referencedColumnName = "iduser")})
    @ManyToMany
    private Collection<Scuser> scuserCollection;
    @ManyToMany(mappedBy = "scuserCollection")
    private Collection<Scuser> scuserCollection1;
    @ManyToMany(mappedBy = "scuserCollection")
    private Collection<Beach> beachCollection;

public Scuser() {
}

public Scuser(String iduser) {
    this.iduser = iduser;
}

public String getIduser() {
    return iduser;
}

public void setIduser(String iduser) {
    this.iduser = iduser;
}

public String getUpassword() {
    return upassword;
}

public void setUpassword(String upassword) {
    this.upassword = upassword;
}

public String getUname() {
    return uname;
}

public void setUname(String uname) {
    this.uname = uname;
}

public Double getTpoints() {
    return tpoints;
}

public void setTpoints(Double tpoints) {
    this.tpoints = tpoints;
}

@XmlTransient
public Collection<Scuser> getScuserCollection() {
    return scuserCollection;
}

public void setScuserCollection(Collection<Scuser> scuserCollection) {
    this.scuserCollection = scuserCollection;
}

@XmlTransient
public Collection<Scuser> getScuserCollection1() {
    return scuserCollection1;
}

public void setScuserCollection1(Collection<Scuser> scuserCollection1) {
    this.scuserCollection1 = scuserCollection1;
}

@XmlTransient
public Collection<Beach> getBeachCollection() {
    return beachCollection;
}

public void setBeachCollection(Collection<Beach> beachCollection) {
    this.beachCollection = beachCollection;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (iduser != null ? iduser.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Scuser)) {
        return false;
    }
    Scuser other = (Scuser) object;
    if ((this.iduser == null && other.iduser != null) || (this.iduser != null && !this.iduser.equals(other.iduser))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "REST.Scuser[ iduser=" + iduser + " ]";
}

}

最佳答案

如果我没理解错的话,你有一个用户的ID,并且你想获取通过这个ID识别的用户的好友。最简单的方法是这样做

Scuser user = em.find(User.class, userId);
Collection<Scuser> friends = user.getScuserCollection();

如果您想使用 JPQL 查询来执行此操作,则只需

select friend from Scuser user 
inner join user.scuserCollection friend
where user.id = :userId

请注意,您的映射不正确:scuserCollection1 和 beachCollection 均由同一属性映射。您还应该为您的关联选择更好的名称(例如 friends,而不是 scuserCollection)。

关于java - 如何使用 Netbeans 的 Rest Web 服务中的 JoinTable 列进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547291/

相关文章:

java - 如何在java中处理异常

java - 复杂环境下的JUnit测试

python - 按字段分组的 Django 查询对象

python - 我的路由中需要什么 base_name 参数才能使这个 Django API 工作?

java - Joda-Time 根据年龄设置日期对象

java - 使用 Mockito,如果我使用 @InjectMocks 将一个对象注入(inject)到我的模拟中,如何避免清空其他对象?

sql - 主从复制是否确保写入显示在以后的读取中?

ruby-on-rails - 如何将数据传递给 Rails 3 中的 IN 查询

java - 了解 Mule ESB 如何适应 JDBC 和 REST

rest - 使用自己的 API 后端处理社交网络身份验证