gpt4 book ai didi

java - spring data jpa 存储库是否可以使用具有相同简单名称的多个实体?

转载 作者:行者123 更新时间:2023-12-02 11:27:09 25 4
gpt4 key购买 nike

在不同的包中有两个具有相同简单名称的实体,引用相同的表名称但不同的方案(物理上不同的表)。代码编译没有错误。如果未触发这些表的行为,则正确执行。但是,当调用包含 home 数据的存储库时,会发生错误 org.hibernate.QueryException:无法解析属性描述。

问题:

  • 文档中描述的情况在哪里?
  • 是否有解决方法可以排除实体类的重命名?

第一个实体:包主目录,表位于默认架构下(在实体管理器中指定):

package com.example.domain.home;

import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;

@Entity
public class Data implements Serializable {
private static final long serialVersionUID = 1L;
@Id
public String id;
public String description;
}

第二个实体:包工作,相同的简单名称,相同的表名称,但不同的架构:

package com.example.domain.work;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

@Entity
@Table(name = "DATA", schema = "WORK")
public class Data implements Serializable {
private static final long serialVersionUID = 1L;
@Id
public String id;
}

从家里查找数据的存储库:

package com.example.domain.home;

import org.springframework.data.jpa.repository.JpaRepository;

public interface DataRepository extends JpaRepository<Data, Long> {
Data findTopByDescription(String description);
}

从工作中查找数据的存储库,需要指定名称,否则 spring 不想正确 Autowiring :

package com.example.domain.work;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository("workDataRepository")
public interface DataRepository extends JpaRepository<Data, Long> {
}

使用存储库之一:

package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.domain.home.DataRepository;

@Service
public class HomeService {

@Autowired
private DataRepository dataRepository;

public void test(){
dataRepository.findTopByDescription("Test");
}
}

在 spring data 和 hibernate 文档中都没有找到任何相关信息。如果还有其他有用的信息,请发表评论。

最佳答案

实体类有三个相关的类似名称的值:

  • 完全限定的类名:您可以使用这个名称,因为它包含包名称。

  • 表名称:您又好了,因为架构使它们变得不同。

  • 实体名称:该名称在 JPQL 查询中使用,并且(我猜)在 Maps 内部用于保存元数据。默认情况下,这与简单类名称相同。但您可以使用 @Entity 更改它(几乎)任何你喜欢的注释。

关于java - spring data jpa 存储库是否可以使用具有相同简单名称的多个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49538131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com