2017-04-26 60 views
0

大家好我有一個小問題,使用@query使用jparepository連接兩個表,但我得到錯誤。請幫我解決一下這個。休眠查詢使用Jparepository連接兩個表

UserAddress.java

package com.surya_spring.example.Model; 

import java.io.Serializable; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 
import javax.validation.constraints.NotNull; 

@Entity 
@Table(name = "user_address") 
//@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 
public class UserAddress implements Serializable { 


/** 
* 
*/ 
private static final long serialVersionUID = -3570928575182329616L; 


/*@ManyToMany(cascade = {CascadeType.ALL},fetch=FetchType.EAGER,mappedBy = "userAddress",targetEntity=UserData.class)*/ 

@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="user_id") 
private UserData userdata; 


@Id 
@Column(name = "addr_id") 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long addrid; 

@Column(name = "dr_no") 
@NotNull 
private String doorNo; 


@Column(name = "strt_name") 
@NotNull 
private String streetName; 

@Column(name = "city") 
@NotNull 
private String city; 

@Column(name = "country") 
@NotNull 
private String country; 



/*@OneToOne(cascade=CascadeType.ALL) 
@Column(name="user_id")*/ 
public UserData getUserdata() { 
    return userdata; 
} 

public void setUserdata(UserData userdata) { 
    this.userdata = userdata; 
} 

public Long getAddrid() { 
    return addrid; 
} 

public void setAddrid(Long addrid) { 
    this.addrid = addrid; 
} 

public String getDoorNo() { 
    return doorNo; 
} 

public void setDoorNo(String doorNo) { 
    this.doorNo = doorNo; 
} 

public String getStreetName() { 
    return streetName; 
} 

public void setStreetName(String streetName) { 
    this.streetName = streetName; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

public String getCountry() { 
    return country; 
} 

public void setCountry(String country) { 
    this.country = country; 
} 

} 

UserData.java

package com.surya_spring.example.Model; 
import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

import lombok.NonNull; 

@Entity 
@Table(name = "user_data") 
public class UserData implements Serializable{ 
/** 
* Serialization ID 
*/ 
private static final long serialVersionUID = 8133309714576433031L; 

/*@ManyToMany(targetEntity=UserAddress.class ,cascade= {CascadeType.ALL },fetch=FetchType.EAGER) 
@JoinTable(name="userdata",joinColumns= @JoinColumn(name="userid"),inverseJoinColumns = @JoinColumn(name="userid")) 
*/ 


@Id 
@Column(name = "user_id") 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long userId; 

@Column(name = "user_name") 
@NonNull 
private String userName; 

@Column(name = "user_email") 
@NonNull 
private String userEmail; 

public Long getUserId() { 
    return userId; 
} 

public void setUserId(Long userId) { 
    this.userId = userId; 
} 

public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getUserEmail() { 
    return userEmail; 
} 

public void setUserEmail(String userEmail) { 
    this.userEmail = userEmail; 
} 
} 

庫:

package com.surya_spring.example.Repository; 


import java.util.List; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 
import org.springframework.data.repository.query.Param; 

import com.surya_spring.example.Model.UserData; 

public interface UserDataRepository extends JpaRepository<UserData, Long>{ 

@Query(" FROM UserData where userId= :id") 
public List<UserData> findBySearchTerm(@Param("id") Long id); 

} 

任何一個讓我知道了查詢加入這個表都得到城市名from user_address where user_id =?加入USER_DATA表

+2

您是否在網站上搜索?有很多與你的問題有關的答案:http://stackoverflow.com/questions/19977130/joining-two-table-entities-in-spring-data-jpa,http://stackoverflow.com/questions/13154818/how -to-define-a-jpa-repository-query-with-a-join,http://stackoverflow.com/questions/26261324/how-to-define-jpa-repository-query-with-a-join .. 。 –

+0

「我收到錯誤」。不知道錯誤是什麼? –

回答

0

如果你想獲得城市的用戶,你可以這樣做:

@Query("SELECT ua.city FROM UserAddress ua WHERE ua.userdata.userId = ?1") 
String findCityByUserId(Long userId); 

注意,使用您的實體名稱(如在Java類中),而不是在數據庫中的表名!您不必親自進行加入,因爲您可以使用域模型的屬性來訪問相關數據

+0

感謝您的回答** QuickSort ** –