2016-05-12 4 views
2

私はSlickに新しくSlick 3.1.1を使用しています。私はこれを実行すると私のテーブルがタプルの要素が多すぎます:27、許可:22

import java.sql.{Blob, Timestamp} 

import slick.collection.heterogeneous.HNil 

import slick.driver.MySQLDriver.api._ 


case class AnomalyC(id: Int, serviceName: String, serviceId: String, timeUpdated: Timestamp, timestamp: Timestamp, anomalyCategoryId: Int, 
        userGroup:Int, riskValue: Float, activityTypeId: Int, destinationHost: String, userName: String, tenantId: Int, information:Blob, timeCreated: Timestamp, userId: Int, anomalyType:Int, anomalyValue:String, measure:Int, 
        userAction:Int, uniqueIdentifier:Int, similarCount:Int, trainingValue:String, state: Int, riskLevel:Int, userRiskLevel:Int, 
        userRiskScore: Float, response:Int) 
class Anomaly(tag:Tag) extends Table[AnomalyC](tag, "Anomaly") { 
    def id = column[Int]("id") 
    def serviceName = column[String]("ServiceName") 
    def serviceId = column[Int]("ServiceId") 
    def timeUpdated = column[Timestamp]("TimeUpdated") 
    def timestamp = column[Timestamp]("Timestamp") 
    def anomalyCategoryId = column[Int]("AnomalyCategoryId") 
    def userGroup = column[Int]("UserGroup") 
    def riskValue = column[Float]("RiskValue") 
    def activityTypeId = column[Int]("ActivityTypeId") 
    def destinationHost = column[String]("DestinationHost") 
    def userName = column[String]("UserName") 
    def tenantId = column[Int]("TenantId") 
    def information = column[Blob]("Information") 
    def timeCreated = column[Timestamp]("TimeCreated") 
    def userId = column[Int]("UserId") 
    def anomalyType = column[Int]("AnomalyType") 
    def anomalyValue = column[String]("AnomalyValue") 
    def measure = column[Int]("Measure") 
    def userAction = column[Int]("UserAction") 
    def uniqueIdentifier = column[String]("UniqueIdentifier") 
    def similarCount = column[Int]("SimilarCount") 
    def trainingValue = column[String]("TrainingValue") 
    def state = column[Int]("State") 
    def riskLevel = column[Int]("RiskLevel") 
    def userRiskLevel = column[Int]("UserRiskLevel") 
    def userRiskScore = column[Float]("UserRiskScore") 
    def response = column[Int]("Response") 

    def * = (id, serviceName, serviceId, timeUpdated, timestamp, anomalyCategoryId, userGroup, 
    riskValue, activityTypeId, destinationHost, userName, tenantId, information, timeCreated, userId, anomalyType, anomalyValue, 
    measure, userAction, uniqueIdentifier, similarCount, trainingValue, state, riskLevel, userRiskLevel, userRiskScore, response) 

} 

のように見える、私は何をしますか

Error:(57, 11) too many elements for tuple: 27, allowed: 22 
    def * = (id, serviceName, serviceId, timeUpdated, timestamp, anomalyCategoryId, userGroup, 
     ^

としてエラーが出ますか?

答えて

2

@ insan-eの回答ごとに、私はこれを書き直しました。これも同様に動作します。私はこのアプローチがより好きですが、コード全体を理解できません

import java.sql.{Blob, Timestamp} 

import slick.driver.MySQLDriver.api._ 

case class Anomaly1(id:Int, serviceName:String, serviceId: Int, timeUpdated: Timestamp, timeStamp: Timestamp, 
        anomalyCategoryId: Int, userGroup: Int, riskValue: Float, activityTypeId: Int, destinationHost: String, userName: String) 

case class Anomaly2(tenantId: Int, information:Blob, timeCreated: Timestamp, userId: Int, anomalyType:Int, anomalyValue: String, measure: Int, userAction: Int, 
        uniqueIdentifier: String, similarCount: Int, trainingValue: String, state: Int, riskLevel: Int, 
        userRiskLevel: Int, userRiskScore: Float, response: Int) 

case class AnomalyRow(anomaly1: Anomaly1, anomaly2: Anomaly2) 

class Anomaly(tag:Tag) extends Table[AnomalyRow](tag, "Anomaly") { 

    def id = column[Int]("id") 
    def serviceName = column[String]("ServiceName") 
    def serviceId = column[Int]("ServiceId") 
    def timeUpdated = column[Timestamp]("TimeUpdated") 
    def timestamp = column[Timestamp]("Timestamp") 
    def anomalyCategoryId = column[Int]("AnomalyCategoryId") 
    def userGroup = column[Int]("UserGroup") 
    def riskValue = column[Float]("RiskValue") 
    def activityTypeId = column[Int]("ActivityTypeId") 
    def destinationHost = column[String]("DestinationHost") 
    def userName = column[String]("UserName") 
    def tenantId = column[Int]("TenantId") 
    def information = column[Blob]("Information") 
    def timeCreated = column[Timestamp]("TimeCreated") 
    def userId = column[Int]("UserId") 
    def anomalyType = column[Int]("AnomalyType") 
    def anomalyValue = column[String]("AnomalyValue") 
    def measure = column[Int]("Measure") 
    def userAction = column[Int]("UserAction") 
    def uniqueIdentifier = column[String]("UniqueIdentifier") 
    def similarCount = column[Int]("SimilarCount") 
    def trainingValue = column[String]("TrainingValue") 
    def state = column[Int]("State") 
    def riskLevel = column[Int]("RiskLevel") 
    def userRiskLevel = column[Int]("UserRiskLevel") 
    def userRiskScore = column[Float]("UserRiskScore") 
    def response = column[Int]("Response") 

    private type Anomaly1TupleType = (Int, String, Int, Timestamp, Timestamp, Int, Int, Float, Int, String, String) 
    private type Anomaly2TupleType = (Int, Blob, Timestamp, Int, Int, String, Int, Int, String, Int, String, Int, Int, Int, Float, Int) 
    private type AnomalyRowTupleType = (Anomaly1TupleType, Anomaly2TupleType) 

    private val anomalyShapedValue = (
    (id, serviceName, serviceId, timeUpdated, timestamp, anomalyCategoryId, userGroup, riskValue, activityTypeId, destinationHost, userName), 
    (tenantId, information, timeCreated, userId, anomalyType, anomalyValue, measure, userAction, uniqueIdentifier, similarCount, trainingValue, state, riskLevel, userRiskLevel, userRiskScore, response) 
    ).shaped[AnomalyRowTupleType] 

    private val toAnomalyRow: (AnomalyRowTupleType => AnomalyRow) = { anomalyTuple => 
    AnomalyRow(anomaly1 = Anomaly1.tupled.apply(anomalyTuple._1), anomaly2 = Anomaly2.tupled.apply(anomalyTuple._2)) 
    } 

    private val toAnomalyTuple: (AnomalyRow => Option[AnomalyRowTupleType]) = { anomalyRow => 
    Some(Anomaly1.unapply(anomalyRow.anomaly1).get, Anomaly2.unapply(anomalyRow.anomaly2).get) 
    } 

    def * = anomalyShapedValue <> (toAnomalyRow, toAnomalyTuple) 
} 
1

HListを使用できます。 Slickは独自の実装であるか、またはおそらくはShapelessを使用できるより優れた相互運用性を備えています。 http://underscore.io/blog/posts/2015/08/08/slickless.html

また、タプルの代わりにケースクラスを使用することもできます。

+0

どのシェイプレスですか?私はあなたが取っているものである 'Maven'を使用していますか? http://mvnrepository.com/search?q=shapeless – daydreamer

+0

これはhttps://github.com/milessabin/shapelessです。これは最新のcom.chuusaiのようです:shapeless:2.3.1 – cvogt

+0

http://mvnrepository.com/artifact/com.chuusai/shapeless_2.11/2.3.0 – daydreamer

2

以下は、@cvogtの指示に基づいて私のために働いていました。

import java.sql.{Blob, Timestamp} 

import slick.collection.heterogeneous.HNil 
import slick.collection.heterogeneous.syntax._ 
import slick.driver.MySQLDriver.api._ 

class Anomaly(tag:Tag) extends Table[Int :: String :: Int :: Timestamp :: Timestamp :: Int :: Int :: Float :: Int :: String 
    :: String :: Int ::Blob :: Timestamp :: Int ::Int ::String ::Int ::Int ::String ::Int ::String :: Int ::Int ::Int :: 
    Float :: Int :: HNil ](tag, "Anomaly") { 

    def id = column[Int]("id") 
    def serviceName = column[String]("ServiceName") 
    def serviceId = column[Int]("ServiceId") 
    def timeUpdated = column[Timestamp]("TimeUpdated") 
    def timestamp = column[Timestamp]("Timestamp") 
    def anomalyCategoryId = column[Int]("AnomalyCategoryId") 
    def userGroup = column[Int]("UserGroup") 
    def riskValue = column[Float]("RiskValue") 
    def activityTypeId = column[Int]("ActivityTypeId") 
    def destinationHost = column[String]("DestinationHost") 
    def userName = column[String]("UserName") 
    def tenantId = column[Int]("TenantId") 
    def information = column[Blob]("Information") 
    def timeCreated = column[Timestamp]("TimeCreated") 
    def userId = column[Int]("UserId") 
    def anomalyType = column[Int]("AnomalyType") 
    def anomalyValue = column[String]("AnomalyValue") 
    def measure = column[Int]("Measure") 
    def userAction = column[Int]("UserAction") 
    def uniqueIdentifier = column[String]("UniqueIdentifier") 
    def similarCount = column[Int]("SimilarCount") 
    def trainingValue = column[String]("TrainingValue") 
    def state = column[Int]("State") 
    def riskLevel = column[Int]("RiskLevel") 
    def userRiskLevel = column[Int]("UserRiskLevel") 
    def userRiskScore = column[Float]("UserRiskScore") 
    def response = column[Int]("Response") 

    def * = id :: serviceName :: serviceId :: timeUpdated :: timestamp :: anomalyCategoryId :: userGroup :: 
    riskValue :: activityTypeId :: destinationHost :: userName :: tenantId :: information :: timeCreated :: userId :: anomalyType :: anomalyValue :: 
    measure :: userAction :: uniqueIdentifier :: similarCount :: trainingValue :: state :: riskLevel :: userRiskLevel :: userRiskScore :: response :: HNil 
} 

ビルドが実行され、テスト合格、しかし、私はまだ見IntelliJのは、次のエラーで文句

enter image description here

0

cvogtはすでに、あなたがネストされたケースクラスを使用することができます言ったように、彼らははるかに簡単です一緒に働くには、hereを参照してください。私はHLISTが強力だと知っていますが、IMHOの人々はそれらをあまりにも強要しています...ケースクラスで何が問題なのですか? xD

AnomalyCクラスは、< = 22個のフィールドを含む2つ以上のケースクラスから構成する必要があります。

関連する問題