java - 无法从 servlet 上下文中检索 hibernate 外键

标签 java mysql hibernate tomcat servlets

我无法使用 Hibernate、Tomcat 和 MySQL 读取引用实体的 ID。

例如,运行以下代码:

List<UserAccount> users = listEntities(UserAccount.class);
    for (UserAccount user : users) {
        UserAccountStatusCatalog status = user.getStatus();
        System.out.println("[User (" + user.getId() + ") : "+user.getAccountName()+"] - " + status + ": " + status.getId());
    } 

将在使用 SQL Server DB 的简单 Java 应用程序或 servlet 上下文中提供以下输出

[User (1) : system] - Suspended: 15020
[User (2) : admin] - Active: 15010
[User (4) : test] - Active: 15010

这来自使用 MySQL DB 的 servlet 上下文

[User (1) : system] - Suspended: 0
[User (2) : admin] - Active: 0
[User (4) : test] - Active: 0

这是在运行 Java 8 的 Tomcat 7 服务器上
数据库是 MySQL 5.5,我使用的是 hibernate-core:5.1.0.Final

我测试了很多不同的方法,例如更改 Hibernate 版本、将 DB 更改为 MariaDB(不工作)和 SQL Server(完美运行)。
我已经在 Tomcat 6、7 和 8 上进行了测试(结果相同,无法正常工作)
在 Java 7 和 8 上测试(结果相同,不工作)

实体

@Entity(name = "UserAccount")
@Table(name = "user_account")
@Audited
public class UserAccount {  
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name="id_status", nullable=false, foreignKey=@ForeignKey(name = ForeignKeys.FK_USERACCOUNT_STATUS))
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    private UserAccountStatusCatalog status;
    [...]


@Entity
@Table(name="user_account_status_catalog")
public class UserAccountStatusCatalog {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = ID_COLUMN_NAME, nullable = false)
    private int id;

    @Column(name = "name", nullable = false)
    private String name;
}

所以我的问题是
有没有人对这个特定问题有任何经验,或者对我可以在哪里继续调试有任何指示,因为我完全不知道该怎么做。

最佳答案

所以我设法自己解决了这个问题。原来罪魁祸首是 javassist-3.16.0 import。 用 javassist3.20.0 导入替换这个旧版本后,一切都按预期的方式工作。

因此,对于任何遇到类似问题的人来说,替换此导入是一个很好的起点。

关于java - 无法从 servlet 上下文中检索 hibernate 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43412288/

相关文章:

php - 转到某人的个人资料

php - 在没有太多 PHP/MYSQL 知识的情况下如何创建 Facebook 应用程序?

mysql - HQL 中的自引用更新

java - 在java中有两种创建对象的方法吗?

java - 在 IntelliJ 中添加您自己的自定义宏,例如 "sout"

java - 如何在 af :column adf table? 中将日期格式化为 yyyy/mm/dd

java - 是否可以使用 Hibernate、JIBX 等技术自动生成带注释的映射 POJO 类?

java - Java Spark 中的 `:path-param` 和 `{path-param}` 有什么区别?

php - mysqli_conn->query... 放入 for 循环中时没有给出任何结果

java - JPA使用auto_increment主键覆盖记录