Postgresql 将Scala Slick与数据库枚举一起使用
使用Slick 3和PostgreSQL,我需要查询和更新一个列类型为enum的表: 创建类型WeekDay作为枚举'sun','mon','tue','wed','thu','fri','sat'; 创建表班次 id串行主键, 用户id整数, 分支id整数, 起始整数, 持续时间整数, 工作日 -外键等。 ; 我尝试使用Slick的MappedColumnType[java.time.DayOfWeek,String],但这并不能满足Postgres的类型检查器TBH的要求,正确地说:Postgresql 将Scala Slick与数据库枚举一起使用,postgresql,scala,slick,slick-3.0,Postgresql,Scala,Slick,Slick 3.0,使用Slick 3和PostgreSQL,我需要查询和更新一个列类型为enum的表: 创建类型WeekDay作为枚举'sun','mon','tue','wed','thu','fri','sat'; 创建表班次 id串行主键, 用户id整数, 分支id整数, 起始整数, 持续时间整数, 工作日 -外键等。 ; 我尝试使用Slick的MappedColumnType[java.time.DayOfWeek,String],但这并不能满足Postgres的类型检查器TBH的要求,正确地说: org
org.postgresql.util.PSQLException: ERROR: column "day" is of type weekday but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
Position: 92
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2412)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2125)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:297)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:428)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:169)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:136)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
at slick.jdbc.JdbcActionComponent$InsertActionComposerImpl$SingleInsertAction.$anonfun$run$15(JdbcActionComponent.scala:520)
表格类别:
类ShiftTabletag:Tag扩展表[Shift]标记,移位{
导入Mappers.dayOfWeekMapper
def id=列[Long]id,O.AutoInc,O.PrimaryKey
def userId=列[Long]用户\u id
def branchId=列[Long]分支\u id
def start=列[Int]start
定义持续时间=列[Int]持续时间
def day=column[DayOfWeek]day/看起来您可以使用不带pg slick的字符串映射到枚举 诀窍是向数据库中添加强制转换,如中所述: 使用INOUT作为赋值创建随工作日变化的角色类型 用INOUT描述避免编写用于强制转换和AS赋值的函数,以便在赋值时隐式应用强制转换 然后可以使用MappedColumnType.base[java.time.DayOfWeek,String]来定义从列到DayOfWeek的映射
我在这里放置了一个可运行的示例:看起来您可以使用不带pg slick的字符串映射到枚举 诀窍是向数据库中添加强制转换,如中所述: 使用INOUT作为赋值创建随工作日变化的角色类型 用INOUT描述避免编写用于强制转换和AS赋值的函数,以便在赋值时隐式应用强制转换 然后可以使用MappedColumnType.base[java.time.DayOfWeek,String]来定义从列到DayOfWeek的映射
我在这里放置了一个可运行的示例:看起来有人已经遇到了相同的问题:谢谢!我正在其他项目中与slick pg合作,但我希望找到一个不需要额外库的解决方案,因为我认为问题很小,可以在本地解决:-看起来有人已经遇到了相同的问题em:谢谢!我在其他项目中与slick pg合作,但我希望找到一个不需要额外库的解决方案,因为我认为问题很小,可以在本地解决:-