2017-12-21 5 views
0

Ich versuche, auf eine Tabelle in meiner sekundären DB zuzugreifen, deren Name ich von meiner primären Datenbank erhalte. Meine Schwierigkeit besteht darin, den "DB-Name" als Parameter in meine sekundäre Abfrage einzugeben (Übrigens verwende ich MyBatis Annotation-basierte Mapper).mybatis - Mehrere Parameter an @One-Annotation übergeben

Das ist mein Mapper

@SelectProvider(type = DealerQueryBuilder.class, method = "retrieveDealerListQuery") 
@Results({ 
    @Result(property="dealerID",    column="frm_dealer_master_id"), 
    @Result(property="dealerTypeID",   column="frm_dealer_type_id",  [email protected](select="retrieveDealerTypeDAO")), 
    @Result(property="dealerName",    column="frm_dealer_name") 
}) 
public List<Dealer> retrieveDealerListDAO(@Param("firmDBName") String firmDBName); 

@Select("SELECT * from ${firmDBName}.frm_dealer_type where frm_dealer_type_id=#{frm_dealer_type_id}") 
@Results({ 
    @Result(property="dealerTypeID",   column="frm_dealer_type_id"), 
    @Result(property="dealerType",    column="frm_dealer_type") 
}) 
public DealerType retrieveDealerTypeDAO(@Param("firmDBName") String firmDBName, @Param("frm_dealer_type_id") int frm_dealer_type_id); 

Die firmDBName Ich habe von meiner "Primary DB" erhalten wird.

  • Wenn ich $ {firmDBName} in meiner zweiten Abfrage nicht angeben, wird die Abfrage versucht, meine primäre Datenbank zuzugreifen und wirft Tabelle „PrimaryDB.frm_dealer_type“ nicht gefunden. Daher versuche ich im Grunde in meiner primären Datenbank nach einer Tabelle namens "frm_dealer_type" zu suchen.
  • Wenn ich versuche, die @Result wie

    @Result (property = "dealerTypeID", Spalte = "firmDBName = firmDBName, frm_dealer_type_id = frm_dealer_type_id" neu zu schreiben, ein = @ One (select = "retrieveDealerTypeDAO"),

Es wird ein Fehler ausgegeben, dass die Spalte "firmDBName" nicht existiert.

  • $ {firmDBName} zu # {firmDBName} zu ändern, hat auch nicht geholfen.

ich in diesem Blog bezog sich - here

Ich möchte eine Lösung für mein Parameter firmDBName aus meiner primären Abfrage in sekundäre Abfrage übergeben.

Antwort

1

Die Einschränkung hier ist, dass Ihre Spalte von der ersten @SELECT zurückgegeben werden muss. Wenn Sie sich den Testfall here ansehen, werden Sie sehen, dass parent_xxx Werte vom ersten Select zurückgegeben werden. Ihr DealerQueryBuilder muss firmDBName als Rückgabewert auswählen, und Ihre Spalte muss den Namen der Rückgabespalte diesem zuordnen.

Ihre Spaltendefinition ist immer falsch, sollte es sein: {frm_dealer_type_id=frm_dealer_type_id,firmDBName=firmDBName} oder was auch immer es zurückgegeben wurde, wie von Ihrer ersten Auswahl.

Auch hier können Sie den Testfall verweise ich oben als auch die Dokumentation hier habe http://www.mybatis.org/mybatis-3/sqlmap-xml.html#Nested_Select_for_Association

+0

Wenn der Spalt Name, der in angegeben {parameter_name = Column_Name} existiert nicht in der DB-Tabelle, wie kann ich weitergeben der Wert für den Parameter_Name in der Form einer Variablen, so {parameter_Name = _my_variable_}? – Razvi

+0

Es muss nicht in Ihrer dB-Tabelle sein, es muss nur von der Auswahl zurückgegeben werden, die von Ihrem sqlprovider generiert wurde. Wenn Sie den Java-Code dafür bereitstellen können, kann ich Ihnen zeigen, wie Sie ihn beheben können. Wenn Sie den Testfall, den ich in meiner Antwort verlinkt habe, nicht sehen können, sehen Sie, wie er bei der ersten Auswahl zurückgegeben wird. – h3adache

+0

Wählen Sie den DB-Namen als Rückgabewert und den benutzerdefinierten Spaltennamen aus, um den Namen der Rückkehrspalte zuzuordnen. Habe das Problem gelöst. Vielen Dank – Razvi

Verwandte Themen