java - 无法覆盖默认id列spring数据JPA

标签 java hibernate hibernate-mapping spring-data-jpa

我最近重构了我们的数据库架构,使每个表中的 id 列的格式为“tableName”+ ID,IE“SettingsID”,而不是所有表中的“id”。现在,当我尝试从这些表之一获取任何内容时,我的 spring-data 后端崩溃了。它提示有一个“无效的列名‘id’”。我假设我需要做的是将 ID 列的新名称映射到 spring data 希望成为 id 列的内容,但到目前为止我还没有成功。

我认为唯一需要的配置将发生在我的实体对象中。这是我的 Settings.java 实体对象类:

@Entity
@Table(name = Settings.TABLE_NAME)
public class Settings extends AbstractPersistable<Long> {
public static final String TABLE_NAME = "SETTINGS";

@AttributeOverride(name = "id", column = @Column(name="settingsID"))
private long settingsID;

@Column(name = "CUSTOMERID")
private String customerID;

@Column(name = "MERCHANTID")
private String merchantID;
...
....
}

以防万一,(我不认为它有影响)这是抛出此错误时我调用的函数:

@Repository
public interface SettingsDAO extends CrudRepository<Settings, Long> {


/**
 * Finds the entry in the Settings table for a given customerID
 * @param customerID   The customerID to search for
 * @return             The settings object for the given customer ID
 */
Settings findOneByCustomerID(String customerID);

}

我得到的错误是(除了通用的 hibernate 错误说它无法提取结果集)是

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'id'.

最佳答案

查看后this发布后,我意识到我不应该在字段上添加 @AttributeOverride 注释,而是在类本身上添加。这样,spring data就不会尝试双重映射id字段。我的新实体对象如下所示:

@Entity
@Table(name = Settings.TABLE_NAME)
@AttributeOverride(name="id", column=@Column(name="SETTINGSID"))
public class Settings extends AbstractPersistable<Long> {
public static final String TABLE_NAME = "SETTINGS";


@Column(name = "CUSTOMERID")
private String customerID;

@Column(name = "MERCHANTID")
private String merchantID;
...

请注意,现在没有 id 字段。

关于java - 无法覆盖默认id列spring数据JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29214859/

相关文章:

java - 可为空到 true 的一对一关系以及使用主键的关系

java - 防止 Hibernate 加载惰性 ManyToOne

java - Hibernate,在单个操作中保存集合属性

java - Selenium DoubleClick WebElement 导致错误

java - 基于 Maven 的代码生成器

java - hibernate 和线程安全 : Is an injected SessionFactory thread safe?

Spring 表达式语言 (SpEL) 不适用于 JPA/hibernate 实体

java - Hibernate 无法初始化代理 - 没有 session

java - 扩展 JPanel 在添加到另一个 JPanel 时显示很小

java createNamedQuery - 实体管理器和持久性