Left在Hibernate中加入,查询仅从左表返回行

时间:2018-02-22 09:52:47

标签: spring hibernate

我有表委托和表kotizacije_cjenovnik和fk kategorije_id,它引用了委托表的id columnn。我想加入这两个表并返回结果。这是我的代表班:

@Entity
@Table(name = "delegat")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Delegat implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotNull
@Column(name = "delegat_name", nullable = false)

@OneToMany(
    cascade = CascadeType.ALL,
    orphanRemoval = true
)
private List<KotizacijeCjenovnik> kategorija = new ArrayList<>();


private String delegatName;

// jhipster-needle-entity-add-field - JHipster will add fields here, do not remove
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getDelegatName() {
    return delegatName;
}

public Delegat delegatName(String delegatName) {
    this.delegatName = delegatName;
    return this;
}

public void setDelegatName(String delegatName) {
    this.delegatName = delegatName;
}
// jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here, do not remove


@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    Delegat delegat = (Delegat) o;
    if (delegat.getId() == null || getId() == null) {
        return false;
    }
    return Objects.equals(getId(), delegat.getId());
}

@Override
public int hashCode() {
    return Objects.hashCode(getId());
}

@Override
public String toString() {
    return "Delegat{" +
        "id=" + getId() +
        ", delegatName='" + getDelegatName() + "'" +
        "}";
   }
} 

这是KotizacijeCjenovnik类:

@Entity
@Table(name = "kotizacije_cjenovnik")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class KotizacijeCjenovnik implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "cijena1", nullable = false)
private Double cijena1;

@Column(name = "cijena2", nullable = false)
private Double cijena2;

@Column(name = "cijena3", nullable = false)
private Double cijena3;

@ManyToOne
private Delegat kategorija;

@ManyToOne
private Kotizacija kotizacija;

// jhipster-needle-entity-add-field - JHipster will add fields here, do not remove
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public Double getCijena1() {
    return cijena1;
}

public KotizacijeCjenovnik cijena1(Double cijena) {
    this.cijena1 = cijena;
    return this;
}

public void setCijena1(Double cijena) {
    this.cijena1 = cijena;
}

public Double getCijena2() {
    return cijena2;
}

public KotizacijeCjenovnik cijena2(Double cijena) {
    this.cijena2 = cijena;
    return this;
}

public void setCijena2(Double cijena) {
    this.cijena2 = cijena;
}

public Double getCijena3() {
    return cijena3;
}

public KotizacijeCjenovnik cijena3(Double cijena) {
    this.cijena3 = cijena;
    return this;
}

public void setCijena3(Double cijena) {
    this.cijena3 = cijena;
}


public Kotizacija getKotizacija() {
    return kotizacija;
}

public KotizacijeCjenovnik kotizacija(Kotizacija kotizacija) {
    this.kotizacija = kotizacija;
    return this;
}

public void setKotizacija(Kotizacija kotizacija) {
    this.kotizacija = kotizacija;
}


public Delegat getDelegat() {
    return kategorija;
}

public KotizacijeCjenovnik delegat(Delegat kategorija) {
    this.kategorija = kategorija;
    return this;
}

public void setDelegat(Delegat kategorija) {
    this.kategorija = kategorija;
}

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    KotizacijeCjenovnik kotizacijeCjenovnik = (KotizacijeCjenovnik) o;
    if(kotizacijeCjenovnik.getId() == null || getId() == null) {
        return false;
    }
    return Objects.equals(getId(), kotizacijeCjenovnik.getId());
}

@Override
public int hashCode() {
    return Objects.hashCode(getId());
}

@Override
public String toString() {
    return "KotizacijeCjenovnik{" +
        "id=" + getId() +
        ", cijena1=" + getCijena1() +
        ", cijena2=" + getCijena2() +
        ", cijena3=" + getCijena3() +
        "}";
   }
 }

这是一个返回结果的函数:

@Query(value="select delegat from Delegat delegat left join fetch delegat.kategorija")
    List<Object> getUnused();

但我只从Delegat获得结果。我的问题是如何从delegat表返回行,以及来自kotizacije_cjenovnik表的匹配行。

1 个答案:

答案 0 :(得分:0)

您可以转动查询并选择多方,只需:

@Query(value="select kot from KotizacijeCjenovnik kot")
    List<KotizacijeCjenovnik> getUnused();

您的查询的每一行都有一个KotizacijeCjenovnik,您可以呼叫每个getDelegat来访问相应的Delegat实体