【问题标题】:Char(3) field @Id is not cacheable in eclipselink jpaChar(3)字段@Id在eclipselink jpa中不可缓存
【发布时间】:2013-04-23 07:24:03
【问题描述】:

由于历史原因,我的数据库中有一些带有 char(3) 主键的表。例如国家表。

当我找到实体时:

String id = "D  ";
Country c = em.find(Country.class, id);

之后我可以看到:

c.getId()  --> "D" and not "D  "

从数据库中一次又一次地读取实体。由于某种原因,缓存不起作用。我猜在缓存中 id 以“D”而不是“D”的形式存在。

20130423 09:15:14,495 FINEST   query                          Execute query     ReadObjectQuery(name="country" referenceClass=Country )
20130423 09:15:14,498 FINEST   connection                     reconnecting to external connection pool
20130423 09:15:14,498 FINE     sql                            SELECT countryID, countryNAME, countryTELCODE, countryTOPLEVELDOMAIN, countryINTTELPREFIX FROM geo.COUNTRY WHERE (countryID = ?)
bind => [D  ]
20130423 09:15:14,508 FINEST   query                          Execute query ReadObjectQuery(name="country" referenceClass=Country )
20130423 09:15:14,508 FINEST   connection                     reconnecting to external connection pool
20130423 09:15:14,508 FINE     sql                            SELECT countryID, countryNAME, countryTELCODE, countryTOPLEVELDOMAIN, countryINTTELPREFIX FROM geo.COUNTRY WHERE (countryID = ?)
bind => [D  ]

我尝试设置@Column(length=3) 但没有效果。

有没有人知道为什么缓存不能正常工作。

谢谢哈桑

【问题讨论】:

    标签: caching jpa eclipselink glassfish-3 entities


    【解决方案1】:

    默认情况下,EclipseLink 会修剪 CHAR 字段的尾随空格。这可以被禁用。

    看, http://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_avoid_trimming_the_trailing_spaces_on_a_CHAR_field.3F

    【讨论】:

    • 谢谢,现在它不会一直重新加载。
    猜你喜欢
    • 2011-03-29
    • 2016-03-18
    • 2014-01-22
    • 2012-11-17
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多