私は休止状態とjpaが初めてです。基本的に、Person と Address の 2 つのテーブルがあります。人は多くのアドレスを持つことができます。個人と住所の間に一対多の関係があります。各人の名と住所を取得したい。
私の2つのテーブルの下に見つけてください:
ADDRESS: ADDRESSID,ADDRESS,PERSONID
PERSON:ID, FIRTSNAME,LASTNAME,PASSWORD.
以下の対応する sql の @NamedQuery を作成する方法に関する構文がわかりません。
select PERSON.FIRSTNAME, ADDRESS.ADDRESS
FROM PERSON
INNER JOIN ADDRESS
ON PERSON.id = ADDRESS.PERSONID;
アドレス エンティティ クラスを見つけてください。select ステートメントが以下のクラスにあると想定しています。
@Entity
@NamedQuery(name="getAddressWithPersonFirstName",query=" ")
@Table(name = "ADDRESS")
public class Address {
@Id
@Column(name = "ADDRESSID")
private int addressId;
@Column(name = "ADDRESS")
private String address;
@Column(name = "PERSONID")
private int personId;
@ManyToOne
@JoinColumn(name="personId")
private Person person;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public int getAddressId() {
return addressId;
}
public void setAddressId(int addressId) {
this.addressId = addressId;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
}
私の2番目のエンティティクラス:
public class Person implements Serializable {
private static final long serialVersionUID = -1308795024262635690L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String firstName;
@Column
private String lastName;
@Column
private String password;
@OneToMany(targetEntity = Address.class, mappedBy = "person")
private List<Address> address;
public List<Address> getAddress() {
return address;
}
public void setAddress(List<Address> address) {
this.address = address;
}
public Person() {
}
public Person(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return super.toString() + " name = " + firstName + " " + lastName
+ " id = " + id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
}
クエリを実行するメソッドを見つけてください:
public List<Address> getAddressByPersonFirstName() {
TypedQuery<Address> query = entityManager.createNamedQuery(
"getAddressWithPersonFirstName", Address.class);
List<Address> results = query.getResultList();
return results;
}
上記のように、私の 2 つの主な問題は、@NamedQuery を作成してすべての住所を人名で検索する方法です。住所と人名を返すため、上記の方法が正しいかどうかはわかりませんが、上記の方法はオブジェクト Address を返します。 .:(
どんな助けでも大歓迎です。もう一度感謝します