2015-11-19 79 views
2

直到包含在播放2.3 ANORM,我可以寫:遷移到anorm2.4(有間隙2.4):ToStatement [T]和ToStatement [選項[T]]

implicit val arbitraryClassToStatement = new ToStatement[ArbitraryClass] { 
    def set( 
    s: java.sql.PreparedStatement, 
    index: Int, 
    aValue: ArbitraryClass 
) 
    : Unit = { 
    s.setString(
     index, 
     ArbitraryClass.definingString 
    ) 
    } 
} 

和這將有助於插入

SQL("INSERT INTO SomeTable Values({nonNullAc}, {possiblyNullAc})").on(
'nonNullAc -> ArbitraryClass("abcd"), 
'possiblyNullAc -> Option(ArbitraryClass("abcd")) 
) 

意味着ArbitraryClass和選項都[ArbitraryClass]將通過它來滿足。這似乎不再是這種情況,因爲我得到以下錯誤:

[error] found : (Symbol, Option[models.Misc.Url]) 
[error]  (which expands to) (Symbol, Option[java.net.URL]) 
[error] required: anorm.NamedParameter 

有人可以請指我什麼是正確的方式來處理這個?我想很少的代碼複製..

回答

4

您需要爲此創建ParameterMetaData[ArbitraryClass]工作

implicit object ArbitraryClassMetaData extends ParameterMetaData[ArbitraryClass] { 
    val sqlType = ParameterMetaData.StringParameterMetaData.sqlType 
    val jdbcType = ParameterMetaData.StringParameterMetaData.jdbcType 
} 

在這裏,我只是重新奪回的ParameterMetaData[String]

+0

值這看起來有幫助。除API參考之外,是否有詳細的文檔? – 0fnt

+0

不幸的是,並不是真的,只有你放在 – vdebergue

+1

之上的鏈接不幸的是,在這種情況下,Scalac不支持'@ implicitNotFound',這將更準確地表明根本原因。 – cchantep