gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:26:21 25 4
gpt4 key购买 nike

我无法使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com