Java 如何通过联接表列为findBy制定JPA方法

Java 如何通过联接表列为findBy制定JPA方法,java,hibernate,jpa,spring-boot,Java,Hibernate,Jpa,Spring Boot,我有两个表,即用户和有join的组织。我必须编写一个方法,该方法将根据包含输入字符串的组织名称为用户提供信息 User.java @Entity @Table(name = "USERS") @EntityListeners(UsersEntityListener.class) @NamedQueries({ @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")}) public class User extends

我有两个表,即用户和有join的组织。我必须编写一个方法,该方法将根据包含输入字符串的组织名称为用户提供信息

User.java

@Entity
@Table(name = "USERS")
@EntityListeners(UsersEntityListener.class)
@NamedQueries({
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")})
public class User extends Domain implements Serializable {

    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @Column(name = "FIRST_NAME", nullable = false)
    private String firstName;
    @Basic(optional = false)
    @Column(name = "LAST_NAME", nullable = false)
    private String lastName;
    @Column(name = "MIDDLE_NAME")
    private String middleName;
    @Basic(optional = false)
    @Column(name = "GENDER", nullable = false)
    private String gender;
    @Basic(optional = false)
    @Column(name = "MOBILE", nullable = false)
    private String mobile;
    @Basic(optional = false)
    @Column(name = "EMAIL", nullable = false)
    private String email;
    @Basic(optional = false)
    @Column(name = "USERNAME", nullable = false)
    private String username;
    @Basic(optional = false)
    @Column(name = "PASSWORD", nullable = false)
    private String password;
    @Column(name = "URL")
    private String url;

    @PrePersist
    public void encryptPassword(){
        this.setPassword(new BCryptPasswordEncoder().encode(getPassword()));
    }


    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    private List<UserRole> userRoles;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
    private Organization organization;

    public User() {
    }


    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;
    }

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }


    public Organization getOrganization() {
        return organization;
    }

    public void setOrganization(Organization organization) {
        this.organization = organization;
    }

    public List<UserRole> getUserRoles() {
        return userRoles;
    }

    public void setUserRoles(List<UserRole> userRoles) {
        this.userRoles = userRoles;
    }

}
@Entity
@Table(name = "ORGANIZATIONS", uniqueConstraints = {
@UniqueConstraint(columnNames = {"USER_ID"})})
@NamedQueries({
@NamedQuery(name = "Organization.findAll", query = "SELECT o FROM Organization o")})
public class Organization extends Domain implements Serializable {

    private static final long serialVersionUID = 1L;

    @Basic(optional = false)
    @Column(name = "ORGANIZATION", nullable = false, length = 256)
    private String organization;
    @Column(name = "WEBSITE")
    private String website;

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "organization")
    private List<Location> locations;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<PurchaseOrder> sendPurchaseOrders;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<PurchaseOrder> receivedPurchaseOrders;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "organization")
    private List<Purchaser> purchasing;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<Quotation> sendQuotations;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<Quotation> receivedQuotations;
    @JoinColumn(name = "USER_ID", referencedColumnName = "ID", nullable = false)
    @OneToOne(optional = false)
    private User user;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<Enquiry> sendEnquiries;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<Enquiry> receivedEnquiries;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "organization")
    private List<Supplier> supplying;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<Invoice> sendInvoices;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<Invoice> receivedInvoices;

    public Organization() {
    }

    public String getOrganization() {
        return organization;
    }

    public void setOrganization(String organization) {
        this.organization = organization;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public List<Location> getLocations() {
        return locations;
    }

    public void setLocations(List<Location> locations) {
        this.locations = locations;
    }

    public List<PurchaseOrder> getSendPurchaseOrders() {
        return sendPurchaseOrders;
    }

    public void setSendPurchaseOrders(List<PurchaseOrder> sendPurchaseOrders) {
        this.sendPurchaseOrders = sendPurchaseOrders;
    }

    public List<PurchaseOrder> getReceivedPurchaseOrders() {
        return receivedPurchaseOrders;
    }

    public void setReceivedPurchaseOrders(List<PurchaseOrder> receivedPurchaseOrders) {
        this.receivedPurchaseOrders = receivedPurchaseOrders;
    }

    public List<Purchaser> getPurchasing() {
        return purchasing;
    }

    public void setPurchasing(List<Purchaser> purchasing) {
        this.purchasing = purchasing;
    }

    public List<Quotation> getSendQuotations() {
        return sendQuotations;
    }

    public void setSendQuotations(List<Quotation> sendQuotations) {
        this.sendQuotations = sendQuotations;
    }

    public List<Quotation> getReceivedQuotations() {
        return receivedQuotations;
    }

    public void setReceivedQuotations(List<Quotation> receivedQuotations) {
        this.receivedQuotations = receivedQuotations;
    }

    public List<Enquiry> getSendEnquiries() {
        return sendEnquiries;
    }

    public void setSendEnquiries(List<Enquiry> sendEnquiries) {
        this.sendEnquiries = sendEnquiries;
    }

    public List<Enquiry> getReceivedEnquiries() {
        return receivedEnquiries;
    }

    public void setReceivedEnquiries(List<Enquiry> receivedEnquiries) {
        this.receivedEnquiries = receivedEnquiries;
    }

    public List<Supplier> getSupplying() {
        return supplying;
    }

    public void setSupplying(List<Supplier> supplying) {
        this.supplying = supplying;
    }

    public List<Invoice> getSendInvoices() {
        return sendInvoices;
    }

    public void setSendInvoices(List<Invoice> sendInvoices) {
        this.sendInvoices = sendInvoices;
    }

    public List<Invoice> getReceivedInvoices() {
        return receivedInvoices;
    }

    public void setReceivedInvoices(List<Invoice> receivedInvoices) {
        this.receivedInvoices = receivedInvoices;
    }

    @OneToMany(mappedBy = "organization")
    private List<Tax> taxes;

    public List<Tax> getTaxes() {
        return taxes;
    }

    public void setTaxes(List<Tax> taxes) {
        this.taxes = taxes;
    }

    @OneToMany(mappedBy = "organization")
    private List<Identity> identities;

    public List<Identity> getIdentities() {
        return identities;
    }

    public void setIdentities(List<Identity> identities) {
        this.identities = identities;
    }

}
@实体
@表(name=“USERS”)
@EntityListeners(UsersEntityListener.class)
@命名查询({
@NamedQuery(name=“User.findAll”,query=“从用户u中选择u”)}
公共类用户扩展域实现可序列化{
私有静态最终长serialVersionUID=1L;
@基本(可选=假)
@列(name=“FIRST\u name”,nullable=false)
私有字符串名;
@基本(可选=假)
@列(name=“LAST_name”,nullable=false)
私有字符串lastName;
@列(name=“MIDDLE_name”)
私有字符串名称;
@基本(可选=假)
@列(name=“GENDER”,nullable=false)
私人字符串性别;
@基本(可选=假)
@列(name=“MOBILE”,nullable=false)
私有字符串移动;
@基本(可选=假)
@列(name=“EMAIL”,nullable=false)
私人字符串电子邮件;
@基本(可选=假)
@列(name=“USERNAME”,null=false)
私有字符串用户名;
@基本(可选=假)
@列(name=“PASSWORD”,null=false)
私有字符串密码;
@列(name=“URL”)
私有字符串url;
@预科生
公共无效加密密码(){
这个.setPassword(新的BCryptPasswordEncoder().encode(getPassword());
}
@OneToMany(cascade=CascadeType.ALL,mappedBy=“user”)
私有列表用户角色;
@OneTONE(cascade=CascadeType.ALL,mappedBy=“用户”)
私人组织;
公共用户(){
}
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getMiddleName(){
返回中间名;
}
public void setMiddleName(字符串middleName){
this.middleName=middleName;
}
公共字符串getGender(){
返回性别;
}
公共无效设置性别(字符串性别){
这个。性别=性别;
}
公共字符串getMobile(){
返回手机;
}
公共void setMobile(字符串移动){
this.mobile=mobile;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共字符串getUrl(){
返回url;
}
公共void setUrl(字符串url){
this.url=url;
}
公共组织{
返回组织;
}
公共组织(组织){
这个组织=组织;
}
公共列表getUserRoles(){
返回用户角色;
}
public void setUserRoles(列出用户角色){
this.userRoles=userRoles;
}
}
Organization.java

@Entity
@Table(name = "USERS")
@EntityListeners(UsersEntityListener.class)
@NamedQueries({
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")})
public class User extends Domain implements Serializable {

    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @Column(name = "FIRST_NAME", nullable = false)
    private String firstName;
    @Basic(optional = false)
    @Column(name = "LAST_NAME", nullable = false)
    private String lastName;
    @Column(name = "MIDDLE_NAME")
    private String middleName;
    @Basic(optional = false)
    @Column(name = "GENDER", nullable = false)
    private String gender;
    @Basic(optional = false)
    @Column(name = "MOBILE", nullable = false)
    private String mobile;
    @Basic(optional = false)
    @Column(name = "EMAIL", nullable = false)
    private String email;
    @Basic(optional = false)
    @Column(name = "USERNAME", nullable = false)
    private String username;
    @Basic(optional = false)
    @Column(name = "PASSWORD", nullable = false)
    private String password;
    @Column(name = "URL")
    private String url;

    @PrePersist
    public void encryptPassword(){
        this.setPassword(new BCryptPasswordEncoder().encode(getPassword()));
    }


    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    private List<UserRole> userRoles;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
    private Organization organization;

    public User() {
    }


    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;
    }

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }


    public Organization getOrganization() {
        return organization;
    }

    public void setOrganization(Organization organization) {
        this.organization = organization;
    }

    public List<UserRole> getUserRoles() {
        return userRoles;
    }

    public void setUserRoles(List<UserRole> userRoles) {
        this.userRoles = userRoles;
    }

}
@Entity
@Table(name = "ORGANIZATIONS", uniqueConstraints = {
@UniqueConstraint(columnNames = {"USER_ID"})})
@NamedQueries({
@NamedQuery(name = "Organization.findAll", query = "SELECT o FROM Organization o")})
public class Organization extends Domain implements Serializable {

    private static final long serialVersionUID = 1L;

    @Basic(optional = false)
    @Column(name = "ORGANIZATION", nullable = false, length = 256)
    private String organization;
    @Column(name = "WEBSITE")
    private String website;

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "organization")
    private List<Location> locations;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<PurchaseOrder> sendPurchaseOrders;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<PurchaseOrder> receivedPurchaseOrders;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "organization")
    private List<Purchaser> purchasing;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<Quotation> sendQuotations;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<Quotation> receivedQuotations;
    @JoinColumn(name = "USER_ID", referencedColumnName = "ID", nullable = false)
    @OneToOne(optional = false)
    private User user;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<Enquiry> sendEnquiries;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<Enquiry> receivedEnquiries;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "organization")
    private List<Supplier> supplying;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "senderOrganization")
    private List<Invoice> sendInvoices;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiverOrganization")
    private List<Invoice> receivedInvoices;

    public Organization() {
    }

    public String getOrganization() {
        return organization;
    }

    public void setOrganization(String organization) {
        this.organization = organization;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public List<Location> getLocations() {
        return locations;
    }

    public void setLocations(List<Location> locations) {
        this.locations = locations;
    }

    public List<PurchaseOrder> getSendPurchaseOrders() {
        return sendPurchaseOrders;
    }

    public void setSendPurchaseOrders(List<PurchaseOrder> sendPurchaseOrders) {
        this.sendPurchaseOrders = sendPurchaseOrders;
    }

    public List<PurchaseOrder> getReceivedPurchaseOrders() {
        return receivedPurchaseOrders;
    }

    public void setReceivedPurchaseOrders(List<PurchaseOrder> receivedPurchaseOrders) {
        this.receivedPurchaseOrders = receivedPurchaseOrders;
    }

    public List<Purchaser> getPurchasing() {
        return purchasing;
    }

    public void setPurchasing(List<Purchaser> purchasing) {
        this.purchasing = purchasing;
    }

    public List<Quotation> getSendQuotations() {
        return sendQuotations;
    }

    public void setSendQuotations(List<Quotation> sendQuotations) {
        this.sendQuotations = sendQuotations;
    }

    public List<Quotation> getReceivedQuotations() {
        return receivedQuotations;
    }

    public void setReceivedQuotations(List<Quotation> receivedQuotations) {
        this.receivedQuotations = receivedQuotations;
    }

    public List<Enquiry> getSendEnquiries() {
        return sendEnquiries;
    }

    public void setSendEnquiries(List<Enquiry> sendEnquiries) {
        this.sendEnquiries = sendEnquiries;
    }

    public List<Enquiry> getReceivedEnquiries() {
        return receivedEnquiries;
    }

    public void setReceivedEnquiries(List<Enquiry> receivedEnquiries) {
        this.receivedEnquiries = receivedEnquiries;
    }

    public List<Supplier> getSupplying() {
        return supplying;
    }

    public void setSupplying(List<Supplier> supplying) {
        this.supplying = supplying;
    }

    public List<Invoice> getSendInvoices() {
        return sendInvoices;
    }

    public void setSendInvoices(List<Invoice> sendInvoices) {
        this.sendInvoices = sendInvoices;
    }

    public List<Invoice> getReceivedInvoices() {
        return receivedInvoices;
    }

    public void setReceivedInvoices(List<Invoice> receivedInvoices) {
        this.receivedInvoices = receivedInvoices;
    }

    @OneToMany(mappedBy = "organization")
    private List<Tax> taxes;

    public List<Tax> getTaxes() {
        return taxes;
    }

    public void setTaxes(List<Tax> taxes) {
        this.taxes = taxes;
    }

    @OneToMany(mappedBy = "organization")
    private List<Identity> identities;

    public List<Identity> getIdentities() {
        return identities;
    }

    public void setIdentities(List<Identity> identities) {
        this.identities = identities;
    }

}
@实体
@表(name=“ORGANIZATIONS”,唯一约束={
@UniqueConstraint(columnNames={“用户ID”})
@命名查询({
@NamedQuery(name=“Organization.findAll”,query=“从组织o中选择o”)}
公共类组织扩展域实现可序列化{
私有静态最终长serialVersionUID=1L;
@基本(可选=假)
@列(name=“ORGANIZATION”,null=false,长度=256)
私人字符串组织;
@栏目(name=“网站”)
私人字符串网站;
公共字符串getWebsite(){
返回网站;
}
公共网站(字符串网站){
this.website=网站;
}
@OneToMany(cascade=CascadeType.ALL,mappedBy=“组织”)
私人名单地点;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“senderOrganization”)
私人列表发送采购订单;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“接收方组织”)
收到采购订单的私有列表;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“组织”)
私人清单采购;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“senderOrganization”)
私人报价单;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“接收方组织”)
收到报价单的私人名单;
@JoinColumn(name=“USER\u ID”,referencedColumnName=“ID”,nullable=false)
@OneToOne(可选=错误)
私人用户;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“senderOrganization”)
私人名单查询;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“接收方组织”)
收到的私人清单要求;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“组织”)
提供私人名单;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“senderOrganization”)
私人发票清单;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“接收方组织”)
私人名单接收语音;
公共组织(){
}
公共字符串getOrganization(){
返回组织;
}
公共组织(字符串组织){
这个组织=组织;
}
公共用户getUser(){
返回用户;
}
公共void setUser(用户){
this.user=用户;
}
公共列表getLocations(){
返回地点;
}
公共位置(列出位置){
这个位置=位置;
}
公共列表getSendPurchaseOrders(){
返回sendPurchaseOrders;
Page<User> findByOrganization_Organization(String organization, Pageable pageable);
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user", fetch=FetchType.EAGER)
private Organization organization;
Page<User> findByOrganization_Organization(@Param(organization)String organization, Pageable pageable);