Java 如何在SpringDataHibernate的关系表中使用findBy

Java 如何在SpringDataHibernate的关系表中使用findBy,java,spring,hibernate,spring-data,spring-data-jpa,Java,Spring,Hibernate,Spring Data,Spring Data Jpa,我已附加了表数据的快照。表名为orderdetail 我想获得客户的基本数据。就像在我的例子中一样,数据应该在购买的基础上由找到 @Entity public class OrderDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ManyToOne @JoinColumn(name="purchased_By") priv

我已附加了表数据的快照。表名为
orderdetail

我想获得客户的基本数据。就像在我的例子中一样,数据应该在
购买的基础上由
找到

@Entity
public class OrderDetail {

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

    @ManyToOne
    @JoinColumn(name="purchased_By")
    private User purchasedBy;
我试图在
OrderDetailDao
存储库中使用以下查询

List<OrderDetail> findByPurchasedBy(User user);
编辑摘要> 当我使用
findAll()
并返回json时,
purchasedBy
部分如下所示:

  "purchasedBy":{  
         "id":15,
         "email":"admin@gmail.com",
         "password":"$2a$10$jj41EbJZTOBfbKdJ6wAdx.rdQq8qU3OqoSzS5mvDVaiL33G1U4pPC",
         "name":"admin",
         "lastName":"admin",
         "active":1,
         "roleselected":null,
         "roles":[  
            {  
               "id":1,
               "role":"admin",
               "users":[  

               ],
               "new":false
            }
         ],
         "new":false
      }
   }

我认为使用自定义查询可能会解决这个问题:

@Query(“从OrderDetail od中选择od,其中od.PurchasedBy.id=?1”)

列表findByPurchasedBy(整数用户ID)

不使用自定义查询jpa存储库支持此功能。检查以下代码是否正常工作,我对其进行了测试

@Entity
@Table(name = "order_details")
public class OrderDetails {

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

@ManyToOne
@JoinColumn(name = "purchased_By")
private User purchasedBy;
}
以下是存储库类:

public interface OrderDetailsRepository extends JpaRepository<OrderDetails, Integer> {
public List<OrderDetails> findByPurchasedBy(User user);
}
public接口OrderDetailsRepository扩展了JpaRepository{
公共列表findByPurchasedBy(用户);
}
服务类方法如下所示:

@Autowired
public OrderDetailsRepository orderDetailsRepository;

public List<OrderDetails> getUserOrders(Integer userId) {
    User user = userRepository.findOne(userId);
    return orderDetailsRepository.findByPurchasedBy(user);
}
@Autowired
公共订单详细信息存储订单详细信息存储;
公共列表getUserOrders(整数用户ID){
User=userRepository.findOne(userId);
return OrderDetails Repository.findByPurchasedBy(用户);
}
使用以下依赖项版本:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.10.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>

org.springframework.data
spring数据jpa
1.10.7.发布
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.1决赛

jpa 1.4检查后,支持许多新功能。

是否需要使用
OrderDetail
中的
PurchasedBy
属性
PurchasedBy
?我已经与PurchasedBy进行了检查,但没有解决问题。我尝试过PurchasedBy,PurchasedBy,PurchasedById,没有人工作。请建议最好按id而不是用户对象查找。哦,没有看到之前的评论。@CholNhial我也用过。列表findBypurchasedBy(int id);但是没有任何影响是由以下原因引起的:java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:expecting IDENT,在第1行附近找到“?”
@Query(“从OrderDetail od中选择od,其中od.purchasedBy.id=?1”)
引起的:org.hibernate.QueryException:无法解析属性:purchasedBy of:com.example.Domain.OrderDetail[从com.example.Domain.OrderDetail od where od.purchasedBy.id=?1中选择od]让我下一步再试一次,然后我将接受您的回答。谢谢我很高兴我帮了忙:)。请也尝试一下。
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.10.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>