HIbernate / JPA Аннотация Присоединитесь к ManyToOne с несколькими столбцами, но с условным ИЛИ - PullRequest
0 голосов
/ 04 марта 2020

Допустим, у меня есть эти сущности

Компания , Пользователь , Проект и Рекомендация

Но я хочу выделить таблицу Project и Рекомендации . Ниже приведен пример сущности.

//Project entity
@Column(name = "id")
private String id;

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

@Column(name = "company_id", nullable = true)
private String companyId;



//Recommendation entity
@Column(name = "id")
private String id;

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

@Column(name = "company_id", nullable = true)
private String companyId;

@OneToMany(fetch = FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumns({
            @JoinColumn(name = "id", referencedColumnName = "user_id", nullable = true, insertable = false, updatable = false),
            @JoinColumn(name = "id", referencedColumnName = "company_id", nullable = true, insertable = false, updatable = false)
    })
private List<Project> projects;

Приведенные выше таблицы являются лишь иллюстрацией, извините, если это не имеет смысла. Я хочу присоединиться к таблице проекта внутри таблицы сертификации. Они оба не связаны напрямую, поэтому мне нужно объединиться, используя эти 2 столбца, userId и companyId.

Однако, companyId может иметь значение null. И всякий раз, когда он равен нулю, я все еще хочу присоединиться к таблице только по userId.

То, чего я хочу достичь, вероятно, так:

Select from Recommendation rec Join Project project 
on rec.user_id = project.user_id and (rec.company_id = project.company_id OR rec.company_id is null)

Можно ли использовать hibernate / JPA аннотации для достижения этой цели?

Мой проект использует Hibernate 5 недавно

...