【发布时间】:2017-09-10 18:11:17
【问题描述】:
我无法使用 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 上下文中给出以下输出
[用户 (1) : 系统] - 暂停:15020
[用户 (2) : admin] - 活动:15010
[用户(4):测试] - 活动:15010
这来自使用 MySQL DB 的 servlet 上下文
[用户(1):系统] - 暂停:0
[用户 (2):管理员] - 活动:0
[用户(4):测试] - 活跃:0
这是在运行 Java 8 的 Tomcat 7 服务器上
数据库是 MySQL 5.5,我使用的是 hibernate-core:5.1.0.Final
我已经测试了很多不同的方法,例如更改 Hibernate 版本、将 DB 更改为 MariaDB(不工作)和 SQL 服务器(工作完美)。
我已经在 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;
}
所以我的问题是
有没有人对这个特定问题有任何经验,或者对我可以在哪里继续调试有任何指示,因为我完全不知道该怎么做。
【问题讨论】:
-
你能分享
UserAccount和UserAccountStatusCatalog的代码吗?
标签: java mysql hibernate tomcat servlets