Non sono sicuro se ciò è possibile ma si tenta di mappare WorkflowInstancePlayer player
che è correlato in base a due altri mapping di entità, WorkActionClass
e WorkflowInstance
nell'entità sottostante.Mappatura entità JPA che è correlata in base a due altri mapping di entità
public class Action implements Serializable {
@Id
private Long action_id;
@ManyToOne
@JoinColumn(name = "work_action_class_id", referencedColumnName = "work_action_class_id")
private WorkActionClass workActionClass;
@ManyToOne
@JoinColumn(name = "workflow_instance_id", referencedColumnName = "workflow_instance_id")
private WorkflowInstance workflowInstance;
UPDATE: How can I map to a WorkflowInstancePlayer player?????
@ManyToOne
@JoinColumns({
@JoinColumn(name = "workflow_instance_id", referencedColumnName = "workflow_instance_id", insertable = false, updatable = false),
@JoinColumn(name = "workActionClass.role_class_id", referencedColumnName = "role_class_id", insertable = false, updatable = false)
})
private WorkflowInstancePlayer player;
Il workflowInstancePlayer è derivato basato su workflow_instance_id
e role_class_id
ma role_class_id
è davvero un attributo di workActionClass
mappata sopra (workActionClass.role_class_id)
public class WorkflowInstancePlayer implements Serializable {
@Id
private WorkflowInstance workflowInstance;
@Id
private RoleClass roleClass;
@ManyToOne
@JoinColumn(name = "badge", referencedColumnName = "badge")
private Employee employee;
public class WorkActionClass implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trx_seq")
private Long work_action_class_id;
@ManyToOne
@JoinColumn(name = "role_class_id")
private RoleClass roleClass;
dati esempio potrebbe essere:
Action
------
Id = 10
work_action_class_id = 7
workflow_instance_id = 2
WorkActionClass
---------------
Id = 7
role_name = reviewer
role_class_id = 3
WorkflowInstancePlayer
----------------------
workflow_instance_id = 2
role_class_id = 3
badge = 111222
Così, alla azione Entity, saprò l'istanza di lettore del flusso di lavoro è dipendente con ID 111222 senza realmente memorizzare il badge nella tabella azione.
UPDATE
Basato sul post di Vlad ho ottimizzato per essere
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumnsOrFormulas({
@JoinColumnOrFormula([email protected](value="(SELECT a.role_class_id FROM (Use Table Name not Entity Name here) a WHERE a.work_action_class_id = work_action_class_id)", referencedColumnName="role_class_id")),
@JoinColumnOrFormula(column = @JoinColumn(name="workflow_instance_id", referencedColumnName="workflow_instance_id"))
})
distintivo = 111222 è una certa funzione del workflow_instance_id (= 2) e role_class_id (= 3) - è corretto? .... se no come si ottiene badge = 111222? – NickJI
non proprio. Questa è un'applicazione per il flusso di lavoro. Il dipendente 111222 è stato assegnato come revisore nel flusso di lavoro. Il revisore avrà molte azioni a seconda del tipo di flusso di lavoro. Il numero di sequenza Oracle di 2 è stato successivamente in linea per l'ID dell'istanza del flusso di lavoro e un ruolo del revisore ha un role_class_id di 3. Quindi questi tre valori vengono inseriti in WorkflowInstancePlayer – jeff
@NickJI Rileggo il tuo commento. se intendi la funzione come in "una relazione" allora sì. Inizialmente l'ho letto come "una formula" come in instance_id volte role_class_id diviso per .... ecc. La relazione è definita nella tabella WorkflowInstancePlayer – jeff