Enveronment:Hinernet 6.6. Java 17, Oracle 19.
I have a 3-table join selection not work:
String sql = “SELECT {T1.}, {T2.}, {T3.*} FROM MRS_NOTIFY_MSG_TYP T1, MRS_NOTIFY_USERS T2,” +
“MRS_NOTIFY_SEND_TO T3 WHERE T1.NOTIFY_MSG_TYPE = '”+commNotMsgType+“’ AND T2.NOTIFY_MSG_TYPE = ‘”+commNotMsgType+“’ AND " +
“T2.SEND_TO_LOC = T3.SEND_TO_LOC AND T2.SEND_TO_TYPE =T3.SEND_TO_TYPE AND T3.ACTV_IND = ‘Y’ AND (T3.YRD =’”+commYrd+”’ OR T3.YRD = ’ ')";
retreive data: get3EntitiesList(MrsNotifyMsgTyp.class,MrsNotifyUsers.class, MrsNotifySendTo.class,sql); bellow is the funtion:
public <T1, T2, T3> List<Object> get3EntitiesList(Class eClass1, Class eClass2,Class eClass3, String sql) throws Exception {
Session sess = null;
List<Object> myList = null;
Transaction transaction = null;
try{
sess = sessionFactory.getCurrentSession();
transaction = sess.beginTransaction();
myList = sess.createNativeQuery(sql, Object.class)
.addEntity(“T1”, eClass1)
.addEntity(“T2”, eClass2)
.addEntity(“T3”, eClass3)
.list();
transaction.commit();
}
catch(Exception ex) {
MarisUtility.logDBException(ex);
throw new Exception (“ThrowedDBException”);
}finally{
if(sess !=null) sess.close();
}
return myList;
}
The followings are the entities.
```
@Table(name = “MRS_NOTIFY_MSG_TYP”) //T1
@Entity
public class MrsNotifyMsgTyp implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "NOTIFY_MSG_TYPE")
private String notifyMsgType;
@Column(name = "SEND_BROADCAST_IND")
private String sendBroadcastInd;
@Column(name = "SEND_EMAIL_IND")
private String sendEmailInd;
@Column(name = "MSG_REJECT_CD")
private String msgRejectCd;
@Column(name = "MSG_TRAN_CD")
private String msgTranCd;
@Column(name = "MSG_ERR_CD")
private String msgErrCd;
@Column(name = "NOTIFY_MSG_TYP_DSC")
private String notifyMsgTypDsc;
@Column(name = "DATETIME_LAST_UPD")
private Date datetimeLastUpd;
@Column(name = "TERM_LAST_UPD")
private String termLastUpd;
@Column(name = "DATETIME_MAINT_UPD")
private Date datetimeMaintUpd;
@Column(name = "TERM_MAINT_UPD")
private String termMaintUpd;
@Column(name = "NOTIFY_MSG")
private String notifyMsg;
@OneToMany(mappedBy="mrsNotifyMsgTyp", fetch = FetchType.LAZY)
private Set<MrsNotifyUsers> mrsNotifyUsers = new HashSet<MrsNotifyUsers>(0);
... get/set
}
@Table(name = “MRS_NOTIFY_USERS”) // T2
@Entity
public class MrsNotifyUsers implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private MrsNotifyUsersPK comp_id;
@Column(name = “DATETIME_LAST_UPD”)
private Date datetimeLastUpd;
@Column(name = “TERM_LAST_UPD”)
private String termLastUpd;
@Column(name = “DATETIME_MAINT_UPD”)
private Date datetimeMaintUpd;
@Column(name = “TERM_MAINT_UPD”)
private String termMaintUpd;
@ManyToOne
@JoinColumn(name = "NOTIFY_MSG_TYPE",insertable=false, updatable=false )
private MrsNotifyMsgTyp mrsNotifyMsgTyp;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "SEND_TO_LOC",insertable=false, updatable=false),
@JoinColumn(name = "SEND_TO_TYPE",insertable=false, updatable=false),
})
private MrsNotifySendTo mrsNotifySendTo;
.. set/get
}
@Embeddable
public class MrsNotifyUsersPK implements java.io.Serializable, MiscelFuncs {
private static final long serialVersionUID = 1L;
@Column(name = “NOTIFY_MSG_TYPE”)
private String notifyMsgType;
@Column(name = “SEND_TO_LOC”)
private String sendToLoc;
@Column(name = “SEND_TO_TYPE”)
private String sendToType;
public MrsNotifyUsersPK(String notifyMsgType, String sendToLoc, String sendToType) {
this.notifyMsgType = notifyMsgType;
this.sendToLoc = sendToLoc;
this.sendToType = sendToType;
}
@Table(name = “MRS_NOTIFY_SEND_TO”) //T3
@Entity
public class MrsNotifySendTo implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private MrsNotifySendToPK comp_id;
@Column(name = “ACTV_IND”)
private String actvInd;
@Column(name = “YRD”)
private String yrd;
@Column(name = “SEND_TO”)
private String sendTo;
@Column(name = “SEND_TO_DESC”)
private String sendToDesc;
@Column(name = “DATETIME_LAST_UPD”)
private Date datetimeLastUpd;
@Column(name = “TERM_LAST_UPD”)
private String termLastUpd;
@Column(name = “DATETIME_MAINT_UPD”)
private Date datetimeMaintUpd;
@Column(name = “TERM_MAINT_UPD”)
private String termMaintUpd;
@OneToMany(mappedBy="mrsNotifySendTo", fetch = FetchType.LAZY)
private Set<MrsNotifyUsers> mrsNotifyUsers = new HashSet<MrsNotifyUsers>(0);
... //set.get
}
@Embeddable
public class MrsNotifySendToPK implements java.io.Serializable, MiscelFuncs {
private static final long serialVersionUID = 1L;
@Column(name = "SEND_TO_LOC")
private String sendToLoc;
@Column(name = "SEND_TO_TYPE")
private String sendToType;
public MrsNotifySendToPK() {
}
public MrsNotifySendToPK(String sendToLoc, String sendToType) {
this.sendToLoc = sendToLoc;
this.sendToType = sendToType;
}
.../set/get
}
```
Columns of the tree tables:
column of MRS_NOTIFY_MSG_TYP T1
NOTIFY_MSG_TYPE (key)
SEND_BROADCAST_IND
SEND_EMAIL_IND
MSG_REJECT_CD
MSG_TRAN_CD
MSG_ERR_CD
NOTIFY_MSG_TYP_DSC
DATETIME_LAST_UPD
TERM_LAST_UPD
DATETIME_MAINT_UPD
TERM_MAINT_UPD
NOTIFY_MSG
COlumns of MRS_NOTIFY_USERS T2:
NOTIFY_MSG_TYPE (key column)
SEND_TO_LOC (key column)
SEND_TO_TYPE (key column)
DATETIME_LAST_UPD
TERM_LAST_UPD
DATETIME_MAINT_UPD
TERM_MAINT_UPD
column of MRS_NOTIFY_SEND_TO T3
SEND_TO_LOC (key column)
SEND_TO_TYPE (key column)
ACTV_IND
YRD
SEND_TO
SEND_TO_DESC
DATETIME_LAST_UPD
TERM_LAST_UPD
DATETIME_MAINT_UPD
TERM_MAINT_UPD
I have enabled SQL Debugging, the SQL and error message in log file:
/* dynamic native SQL query */ SELECT
T1.NOTIFY_MSG_TYPE notify_msg_type1_25_0_,
T1.DATETIME_LAST_UPD datetime_last_upd2_25_0_,
T1.DATETIME_MAINT_UPD datetime_maint_upd3_25_0_,
T1.MSG_ERR_CD msg_err_cd4_25_0_,
T1.MSG_REJECT_CD msg_reject_cd5_25_0_,
T1.MSG_TRAN_CD msg_tran_cd6_25_0_,
T1.NOTIFY_MSG notify_msg7_25_0_,
T1.NOTIFY_MSG_TYP_DSC notify_msg_typ_dsc8_25_0_,
T1.SEND_BROADCAST_IND send_broadcast_ind9_25_0_,
T1.SEND_EMAIL_IND send_email_ind10_25_0_,
T1.TERM_LAST_UPD term_last_upd11_25_0_,
T1.TERM_MAINT_UPD term_maint_upd12_25_0_,
T2.NOTIFY_MSG_TYPE notify_msg_type1_28_1_,
T2.SEND_TO_LOC send_to_loc2_28_1_,
T2.SEND_TO_TYPE send_to_type3_28_1_,
T2.DATETIME_LAST_UPD datetime_last_upd4_28_1_,
T2.DATETIME_MAINT_UPD datetime_maint_upd5_28_1_,
T2.TERM_LAST_UPD notify_msg_type1_28_1_,
T2.TERM_MAINT_UPD send_to_loc2_28_1_,
T3.SEND_TO_LOC send_to_loc1_27_2_,
T3.SEND_TO_TYPE send_to_type2_27_2_,
T3.ACTV_IND actv_ind3_27_2_,
T3.DATETIME_LAST_UPD datetime_last_upd4_27_2_,
T3.DATETIME_MAINT_UPD datetime_maint_upd5_27_2_,
T3.SEND_TO send_to6_27_2_,
T3.SEND_TO_DESC send_to_desc7_27_2_,
T3.TERM_LAST_UPD term_last_upd8_27_2_,
T3.TERM_MAINT_UPD term_maint_upd9_27_2_,
T3.YRD yrd10_27_2_
FROM
MRS_NOTIFY_MSG_TYP T1,
MRS_NOTIFY_USERS T2,
MRS_NOTIFY_SEND_TO T3
WHERE
T1.NOTIFY_MSG_TYPE = T2.NOTIFY_MSG_TYPE
and T2.SEND_TO_LOC=T3.SEND_TO_LOC
and T2.SEND_TO_TYPE=T3.SEND_TO_TYPE
AND T2.NOTIFY_MSG_TYPE = ‘SCN-NOGO’
AND T2.SEND_TO_LOC = T3.SEND_TO_LOC
AND T2.SEND_TO_TYPE =T3.SEND_TO_TYPE
AND T3.ACTV_IND = ‘Y’
AND (
T3.YRD =‘SCN-NOGO’
OR T3.YRD = ’ ’
)
25-08-07 11:43:05.450-0700 WARN SQL Error: 17006, SQLState: 99999
25-08-07 11:43:05.450-0700 ERROR Invalid column name
25-08-07 11:43:05.450-0700 DEBUG 1: Unable to find column position by name: term_last_upd6_28_1_
if I change the sql to this:
String sql = "SELECT " +
"T1.NOTIFY_MSG_TYPE AS T1_NOTIFY_MSG_TYPE, T1.SEND_BROADCAST_IND AS T1_SEND_BROADCAST_IND, "+
"T1.SEND_EMAIL_IND AS T1_SEND_EMAIL_IND, T1.MSG_REJECT_CD AS T1_MSG_REJECT_CD, "+
"T1.MSG_TRAN_CD AS T1_MSG_TRAN_CD, T1.MSG_ERR_CD AS T1_MSG_ERR_CD, "+
"T1.NOTIFY_MSG_TYP_DSC AS T1_NOTIFY_MSG_TYP_DSC, T1.DATETIME_LAST_UPD AS T1_DATETIME_LAST_UPD, "+
"T1.TERM_LAST_UPD AS T1_TERM_LAST_UPD, T1.DATETIME_MAINT_UPD AS T1_DATETIME_MAINT_UPD, "+
"T1.TERM_MAINT_UPD AS T1_TERM_MAINT_UPD, T1.NOTIFY_MSG AS T1_NOTIFY_MSG, "+
"T2.NOTIFY_MSG_TYPE AS T2_NOTIFY_MSG_TYPE, T2.SEND_TO_LOC AS T2_SEND_TO_LOC, "+
"T2.SEND_TO_TYPE AS T2_SEND_TO_TYPE, T2.DATETIME_LAST_UPD AS T2_DATETIME_LAST_UPD, "+
"T2.TERM_LAST_UPD AS T2_TERM_LAST_UPD, T2.DATETIME_MAINT_UPD AS T2_DATETIME_MAINT_UPD, "+
"T2.TERM_MAINT_UPD AS T2_TERM_MAINT_UPD, T3.SEND_TO_LOC AS T3_SEND_TO_LOC, "+
"T3.SEND_TO_TYPE AS T3_SEND_TO_TYPE, T3.ACTV_IND AS T3_ACTV_IND, "+
"T3.YRD AS T3_YRD, T3.SEND_TO AS T3_SEND_TO, "+
"T3.SEND_TO_DESC AS T3_SEND_TO_DESC, T3.DATETIME_LAST_UPD AS T3_DATETIME_LAST_UPD, "+
“T3.TERM_LAST_UPD AS T3_TERM_LAST_UPD, T3.DATETIME_MAINT_UPD AS T3_DATETIME_MAINT_UPD, “+
“T3.TERM_MAINT_UPD AS T3_TERM_MAINT_UPD " +
“FROM MRS_NOTIFY_MSG_TYP T1, MRS_NOTIFY_USERS T2,” +
“MRS_NOTIFY_SEND_TO T3 WHERE T1.NOTIFY_MSG_TYPE = T2.NOTIFY_MSG_TYPE AND T1.NOTIFY_MSG_TYPE = ‘”+commNotMsgType+”’ AND " +
“T2.SEND_TO_LOC = T3.SEND_TO_LOC AND T2.SEND_TO_TYPE =T3.SEND_TO_TYPE AND T3.ACTV_IND = ‘Y’ AND (T3.YRD =’”+commYrd+”’ OR T3.YRD = ’ ')”;
the error occurred on different column:
25-08-07 13:35:51.094-0700 WARN SQL Error: 17006, SQLState: 99999
25-08-07 13:35:51.094-0700 ERROR Invalid column name
25-08-07 13:35:51.101-0700 DEBUG 1: Unable to find column position by name: NOTIFY_MSG_TYPE
[Invalid column name]