java - Hibernate @Embeddable 类对于未引用的列抛出 "SQLServerException: Invalid column name"

标签 java hibernate embeddable

我一直在为这件事抓狂。我有一个类像这样拉动对象:

public UserDTO getUser(String login)
{
    String jql = "select entity from User as entity  where entity.abcUserId = :userID ";

    Query query = _entityManager.createQuery(jql)
            .setParameter("userID", login);
    try
    {
        Object user = query.getSingleResult();
        return ((User) user).extractObject();
    }
    catch(NoResultException e)
    {
        LOG.error(e.getMessage());
        return null;
    }

}

随着它正在拉动的类:

@Entity
@Table(name="ABC_User")
public class User implements Serializable,EntityObject<UserDTO>
{

private static final long   serialVersionUID    = 1L;

private Long id;
private String abcUserId;
private Company company;
private List<UserPreference> userPreferences;

@Id
@GeneratedValue
public Long getId()
{
    return id;
}

public void setId(Long id)
{
    this.id = id;
}

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Company_ID", nullable=false)
public Company getCompany()
{
    return company;
}

public void setCompany(Company customer)
{
    this.company = customer;
}

/**
 * @return the userPreference
 */
@ElementCollection(fetch=FetchType.EAGER)
@JoinTable(name="ABC_USER_PREFERENCES")
@Cascade(value={org.hibernate.annotations.CascadeType.ALL})
public List<UserPreference> getUserPreferences()
{
    if(userPreferences == null)
    {
        userPreferences = new ArrayList<UserPreference>();
    }
    return userPreferences;
}

/**
 * @param userPreference the userPreference to set
 */
public void setUserPreferences(List<UserPreference> userPreferences)
{
    this.userPreferences = userPreferences;
}

/**
 * @return the abcUserId
 */
@Column(name="ABC_USER_ID", length=10, nullable=false)
public String getAbcUserId()
{
    return abcUserId;
}

/**
 * @param abcUserId the abcUserId to set
 */
public void setAbcUserId(String abcUserId)
{
    this.abcUserId = abcUserId;
}

它引用了这个可嵌入对象:

@Embeddable
public class UserPreference implements Serializable
{
private static final long   serialVersionUID    = 1L;

private String prefKey;
private String prefValue;

public UserPreference() {}

public UserPreference(String key, String value)
{
    this.prefKey = key;
    this.prefValue = value;
}

@Column(nullable=false, length=255)
public String getPrefKey()
{
    return prefKey;
}
public void setPrefKey(String key)
{
    this.prefKey = key;
}
@Column(nullable=false, length=1048576)
public String getPrefValue()
{
    return prefValue;
}
public void setPrefValue(String value)
{
    this.prefValue = value;
}
}

所以,冗长的代码块加上一些经过审查的内容,这是行不通的。每次我尝试从数据库中提取用户时,它都会抛出“SQLServerException:无效的列名'User_id'”。我的项目中从未引用过 User_id(我已检查过),它始终 abc_user。我可以看到该对象在 Eclipse 调试器中被拉到一起,它达到了添加 UserPreferences 列表的程度,然后分崩离析。如果我注释掉 User 类的 UserPreferences 部分,它会成功拉取(并在使用它们的其他地方中断)。

我错过了什么?

最佳答案

请参阅以下代码部分

@Column(name="ABC_USER_ID", length=10, nullable=false)
public String getAbcUserId()
{
    return abcUserId;
}

检查表是否具有列名称“ABC_USER_ID”。 然后,尝试将此代码放在 @JoinTable 部分之前

关于java - Hibernate @Embeddable 类对于未引用的列抛出 "SQLServerException: Invalid column name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626451/

相关文章:

java - Hibernate 中 @Embedded 类的聚合

javascript - 使用 React 创建可嵌入的小部件

Java Jersey 2 客户端和代理

java - Aerospike 给出旧值但不提供更新值的罕见情况

java - 在通用树中找到下一个更大的节点?

java - 运行时的 Maven 构建过程/部署和属性

sql - 如何在Hibernate的import.sql中将表达式分成更多行?

java - Bean验证: at least one element of a list must have one field filled

java - Hibernate 在 emddable websphere 容器中找不到 java :comp/websphere/ExtendedJTATransaction

java - 从我的二级 ehcache 中检索项目后出现 "org.hibernate.LazyInitializationException"异常