Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@许多人与JPA有冲突_Jpa_Spring Data Jpa - Fatal编程技术网

@许多人与JPA有冲突

@许多人与JPA有冲突,jpa,spring-data-jpa,Jpa,Spring Data Jpa,@ManyToOne或@OneToOne将用实体替换联接列,但是当我想使用JpaRepository按该联接列进行查询时,我该怎么做?似乎有冲突 @Entity public class Type { private Long id; } @Entity public class Item { @ManyToOne @JoinColumn(name = "type_id") private Type type; } public interface ItemR

@ManyToOne或@OneToOne将用实体替换联接列,但是当我想使用JpaRepository按该联接列进行查询时,我该怎么做?似乎有冲突

@Entity
public class Type {
    private Long id;
}

@Entity
public class Item {
    @ManyToOne
    @JoinColumn(name = "type_id")
    private Type type;
}

public interface ItemRepository extends JpaRepository<Item, Long> {
    List<Item> findByTypeId(Long typeId);
}
@实体
公共类类型{
私人长id;
}
@实体
公共类项目{
@许多酮
@JoinColumn(name=“type\u id”)
私有类型;
}
公共接口ItemRepository扩展了JpaRepository{
列出findByTypeId(长类型ID);
}

它抛出错误“property typeId not found”,这很有意义,因为它肯定不在类“item”中,而是一个实体“type”。但在这种情况下,如何按类型\ id查询项目?如果我声明属性typeId,它将为列“type\u id”抛出错误复制映射

public interface ItemRepository extends JpaRepository<Item, Long> {
    List<Item> findByType_Id(Long typeId);
}
public interface ItemRepository扩展了JpaRepository{
列出findByType_Id(长类型Id);
}

你必须像这样做

public interface ItemRepository extends JpaRepository<Item, Long> {
    List<Item> findByType_Id(Long typeId);
}
public interface ItemRepository扩展了JpaRepository{
列出findByType_Id(长类型Id);
}

除了使用默认模式外,还有什么方法可以指定属性名称?您所说的默认模式是什么意思。你可以在_之后指定子类的任何属性,我的意思是,如果我不想使用“u”并指定我自己的名字,因为这会导致其他人混淆这个属性的来源。类似于@JoinColumn(name=“type\u id”,propertyName=“typeId”),因此我可以将方法命名为findByTypeId()。您需要注意的是,您没有编写查询。Spring数据正在根据方法名称为您创建查询。因此,您需要以spring数据希望您指定的方式指定方法名称。如果您想定义自己的方法名,您可以这样做,但您需要使用
@Query(…)
指定与之关联的查询。有没有办法指定属性名,而不仅仅是使用默认模式?默认模式是什么意思。你可以在_之后指定子类的任何属性,我的意思是,如果我不想使用“u”并指定我自己的名字,因为这会导致其他人混淆这个属性的来源。类似于@JoinColumn(name=“type\u id”,propertyName=“typeId”),因此我可以将方法命名为findByTypeId()。您需要注意的是,您没有编写查询。Spring数据正在根据方法名称为您创建查询。因此,您需要以spring数据希望您指定的方式指定方法名称。如果您想定义自己的方法名称,可以这样做,但需要使用
@Query(…)