Heroku 上的 PSQLException
Posted
技术标签:
【中文标题】Heroku 上的 PSQLException【英文标题】:PSQLException on heroku 【发布时间】:2017-12-08 21:25:24 【问题描述】:我使用 java、apache-cayenne 和 postgreSQL。
我的应用在桌面上运行良好,但在 Heroku 上运行时出现错误:
org.postgresql.util.PSQLException: Bad value for type timestamp/date/time:
1
还有警告:
INFO org.apache.cayenne.log.JdbcEventLogger - --- transaction started.
WARN org.apache.cayenne.access.types.SerializableTypeFactory - Haven't found suitable ExtendedType for class 'java.time.LocalDate'. Most likely you need to define a custom ExtendedType.
WARN org.apache.cayenne.access.types.SerializableTypeFactory - SerializableType will be used for type conversion.
INFO org.apache.cayenne.log.JdbcEventLogger - --- transaction started.
INFO org.apache.cayenne.log.JdbcEventLogger - SELECT t0.DATE, t0.ROOM, t0.TIME, t0.TYPE, t0.PROFESSOR_ID, t0.SUBJECT_ID, t0.LESSON_ID FROM Lesson t0 JOIN Subject t1 ON (t0.SUBJECT_ID = t1.SUBJECT_ID) WHERE (t0.DATE = ?) AND (t1.USER_ID = ?) [bind: 1->DATE:2017-12-08, 2->USER_ID:81627965]
这是我的 xml:
<db-entity name="Lesson">
<db-attribute name="DATE" type="DATE"/>
<db-attribute name="LESSON_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
<db-attribute name="PROFESSOR_ID" type="INTEGER"/>
<db-attribute name="ROOM" type="VARCHAR" length="50"/>
<db-attribute name="SUBJECT_ID" type="INTEGER"/>
<db-attribute name="TIME" type="TIME"/>
<db-attribute name="TYPE" type="INTEGER"/>
</db-entity>
<obj-entity name="Lesson" className="com.intetics.organizerbot.entities.Lesson" dbEntityName="Lesson">
<obj-attribute name="date" type="java.time.LocalDate" db-attribute-path="DATE"/>
<obj-attribute name="room" type="java.lang.String" db-attribute-path="ROOM"/>
<obj-attribute name="time" type="java.time.LocalTime" db-attribute-path="TIME"/>
<obj-attribute name="type" type="int" db-attribute-path="TYPE"/>
</obj-entity>
我在桌面和 Heroku 中使用同一个 Heroku Postgres 数据库。
似乎有一些与 LocalDate 类有关的问题。但是我不知道为什么在我的电脑上一切正常,而在 heroku 上却有问题。
我也尝试过部署 jar,效果很好,但还是不行。
您对为什么会发生这种情况以及如何解决它有任何想法吗?
关于生产服务器Bad value for type timestamp on production server 的类似问题 但我似乎无法在 Heroku 上应用它的答案。
【问题讨论】:
我敢打赌这也是驱动程序版本问题。 您对 apache-cayenne 使用的依赖项和版本是什么? 我使用的是 cayenne-server 和 cayenne-java8。两个版本 4.0.M5 您的路径上似乎可能有多个版本的 cayenne 或 jdbc 驱动程序。 【参考方案1】:为了使用 Cayenne 的 Java 8 java.time.*
类,您需要确保将 cayenne-java8 模块包含到您的项目中,有关详细信息,请参阅此 docs。没有它,Cayenne 就不知道如何处理这些类。
【讨论】:
以上是关于Heroku 上的 PSQLException的主要内容,如果未能解决你的问题,请参考以下文章