2015-07-14 11 views
14

अगर यह संभव है, लेकिन मैप करने के लिए WorkflowInstancePlayer player जो दो अन्य संस्था मैपिंग, WorkActionClass और WorkflowInstance नीचे इकाई में के आधार पर संबंधित है की कोशिश कर रहा है सुनिश्चित नहीं हैं के आधार पर संबंधित है।जेपीए इकाई मानचित्रण जो दो अन्य संस्था मैपिंग

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; 


workflowInstancePlayer ली गई है workflow_instance_id और role_class_id लेकिन role_class_id के आधार पर वास्तव में ऊपर (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; 


मैप किया workActionClass के attibute है
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; 

उदाहरण डेटा होगा:

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 

तो कार्रवाई इकाई में, मैं पता चल जाएगा वर्कफ़्लो इंस्टांस प्लेयर वास्तव में कार्रवाई तालिका में बिल्ला के भंडारण के बिना आईडी 111,222 के साथ कर्मचारी है।

अद्यतन

इसे होने की Vlad पद मैं बदलाव के आधार पर

@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")) 
}) 
+0

बिल्ला = 111,222 workflow_instance_id के कुछ कार्य है (= 2) और role_class_id (= 3) - क्या यह सही है? .... यदि आप बैज = 111222 कैसे प्राप्त करते हैं? – NickJI

+0

वास्तव में नहीं। यह वर्कफ़्लो एप्लिकेशन है। कार्यकर्ता 111222 को वर्कफ़्लो में समीक्षाकर्ता के रूप में असाइन किया गया था। वर्कफ़्लो प्रकार के आधार पर समीक्षक के पास कई क्रियाएं होंगी। वर्कफ़्लो इंस्टेंस आईडी के लिए ओरेकल अनुक्रम संख्या 2 की अगली इनलाइन थी और एक समीक्षाकर्ता भूमिका में 3 का role_class_id है। इसलिए उन तीन मानों को वर्कफ़्लो इंस्टेंसप्लेयर – jeff

+0

@NickJI में डाला गया है, मैंने आपकी टिप्पणी दोबारा पढ़ी है। यदि आपका मतलब है "रिश्ते" के रूप में कार्य करें तो हां। सबसे पहले मैंने इसे "फॉर्मूला" के रूप में पढ़ा है जैसे example_id times role_class_id द्वारा विभाजित .... आदि। वर्कफ़्लो इंस्टेंसप्लेयर टेबल – jeff

उत्तर

6

इस मानचित्रण के साथ प्रयास करें:

@ManyToOne 
@JoinColumn(
    name = "workflow_instance_id", 
    referencedColumnName = "workflow_instance_id", 
    insertable = false, 
    updatable = false 
) 
private WorkflowInstance workflowInstance; 

@ManyToOne 
@JoinColumnOrFormula(
    formula = @JoinFormula(
      value="(SELECT a.work_action_class_id FROM WorkActionClass a WHERE a.role_class_id = role_class_id)", 
     referencedColumnName = "work_action_class_id" 
    ) 
) 
private WorkActionClass workActionClass; 

@ManyToOne 
@JoinColumns({ 
    @JoinColumn(
     name = "workflow_instance_id", 
     referencedColumnName = "workflow_instance_id"), 
    @JoinColumn(
     name = "role_class_id", 
     referencedColumnName = "role_class_id") 
}) 
private WorkflowInstancePlayer player; 
+0

आपके @JoinColumnOrFormula ने मदद की है।मेरी पोस्ट देखें, मेरा मानना ​​है कि फॉर्मूला वर्कफ़्लो इंस्टेंसप्लेयर मैपिंग पर होना चाहिए। चीजें संकलित करें और मेरी सारणी अपेक्षित के रूप में बनाई जानी चाहिए लेकिन अब मुझे ओआरए -0179 9 मिल गया है: पुनर्प्राप्ति के दौरान एक कॉलम बाहरी से जुड़ नहीं सकता है। – jeff

+0

ग्रेट। उस त्रुटि के लिए, एसोसिएशन LAZY बनाएं और सुनिश्चित करें कि आप इसे फ़िनच में शामिल नहीं करते हैं, ताकि हाइबरनेट को द्वितीयक क्वेरी के साथ पुनर्प्राप्त करने की अनुमति मिल सके। –

+0

हम्म मैंने क्लिक किया और ऊपर उठाया, फिर मेरी टिप्पणी जोड़ा। आईई में सबमिट की गई टिप्पणी लटका है इसलिए मैंने क्लिपबोर्ड, ताज़ा पृष्ठ पर कॉपी किया और इसे फिर से चिपकाया। उपरोक्त समय सारिणी भी होनी चाहिए। मुझे LAZY आज़माएं और देखें कि क्या हम इस प्रश्न को – jeff

संबंधित मुद्दे