休眠在不同的架构或会话中加入两个实体

时间:2018-06-21 00:31:06

标签: spring hibernate criteria hibernate-criteria

我有多个具有每个表的架构。

ANIMAL.pet

@Entity
@Table(schema = "ANIMAL", name = "pet")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Pet {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx")
    private Integer idx;

    @Column(name = "name")
    private String name;
}

人类。

@Entity
@Table(schema = "HUMAN", name = "person")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx")
    private Integer idx;

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

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="pet_idx")
    private Pet pet;
}

我使用条件5.3并进行每个配置,这些配置具有自己的数据源,SessionFactory和TransactionManager。

每个存储库都使用其TransactionManager和会话。

例如

@Repository
@Transactional(value = "AnimalTransactionManager", readOnly = true)
public class AnimalRepository implements BaseRepository {

    @Autowired
    @Qualifier("AnimalSessionFactory")
    private SessionFactory sessionFactory;

    public Session session () {
        return sessionFactory.openSession();
    }

    public CriteriaBuilder createCriteria() {
        return session().getCriteriaBuilder();
    }
}

这些是我尝试过的。

  
      
  1. @JoinTable
  2.   
  3. @SecondaryTable
  4.   

可联合表和辅助表批注仅可以连接它们的每个Id值,因此会带来错误的值。

  
      
  1. 加入<宠物,人>
  2.   

所以我在使用我的标准查询时尝试使用Join。由于我使用的是有关宠物的架构ANIMAL的会话,因此它将调用ANIMAL.person并带来错误。

我发现对于以不同的模式连接不同的会话并具有不同会话的两个实体没有答案。

那些不会带来我想要和期望的结果。

那么,有谁对joincolumn有一个想法,可以在不同的模式或会话中加入两个实体?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。

将具有“ schema”值的属性名称“ catalog”放入目录。

@Table(schema = "HUMAN", catalog = "HUMAN", name = "person")

我尚不清楚确切的工作方式,但对我来说很好。 而且,如果我对此有任何想法,我将编辑此答案。