java - 使用 Spring Data JPA 访问数据时,会在任一表上创建空列

标签 java mysql hibernate jpa spring-data-jpa

我是 Spring Data JPA 和 Hibernate 的新手。通过查看不同的示例,我为一个实体上的 CRUD 操作构建了一个工作模型,但我在连接两个表以使用 AF_ID 从另一个表(即外键)中提取 AF_NAME 时遇到了麻烦。使用 的名称创建一个空列,并且在访问时返回 null。请检查我是否遵循连接的前提条件,并向我指出任何已知的教程。 I followed this solution and still there is no progress.

@Entity
@Configuration
@EnableAutoConfiguration
@Table(name = "AFF_CONFIG")
public class AFF_CONFIG implements Serializable {

@Id
@Column(name = "AFF_CONFIG_ID")
private String AFF_CONFIG_ID;

@Column(name = "AFF_ID")
private String AFF_ID;

@Column(name = "CH_ID")
private String CH_ID;

@Column(name = "M_ID")
private Long M_ID;

@Column(name = "KEY")
private String KEY;

@Column(name = "VALUE")
private String VALUE;

@Column(name = "SYSTEM")
private String SYSTEM;

private AFF aff;

@LazyCollection(LazyCollectionOption.TRUE)
@ManyToOne
@JoinColumn(name = "AFF_ID")
public AFF getAff() {
    return aff;
}

public void setAffiliate(AFF aff) {
    this.aff = aff;
}

public String getAFF_CONFIG_ID() {
    return AFF_CONFIG_ID;
}

public void setAFF_CONFIG_ID(String aFF_CONFIG_ID) {
    AFF_CONFIG_ID = aFF_CONFIG_ID;
}

public String getAFF_ID() {
    return AFF_ID;
}

public void setAFF_ID(String aFF_ID) {
    AFF_ID = AFF_ID;
}

public String getCH_ID() {
    return CH_ID;
}

public void setCHANNEL_ID(String cH_ID) {
    CH_ID = cH_ID;
}

public Long getM_ID() {
    return M_ID;
}

public void setM_ID(Long m_ID) {
    M_ID = m_ID;
}

public String getKEY() {
    return KEY;
}

public void setKEY(String kEY) {
    KEY = kEY;
}

public String getVALUE() {
    return VALUE;
}

public void setVALUE(String vALUE) {
    VALUE = vALUE;
}

public String getSYSTEM() {
    return SYSTEM;
}

public void setSYSTEM(String sYSTEM) {
    SYSTEM = sYSTEM;
}

第二个实体是:

@Entity
@Table(name = "AFF")
public class AFF implements Serializable {

@Column(name = "AFF_NAME")
private String AFF_NAME;

@Column(name = "AFF_CODE")
private String AFF_CODE;

@Id
@Column(name = "AFF_ID")
private String AFF_ID;

private Set<AFF_CONFIG> someAff = new HashSet<AFF_CONFIG>();

@LazyCollection(LazyCollectionOption.TRUE)
@OneToMany(cascade = CascadeType.ALL, mappedBy = "aff")

public Set<AFF_CONFIG> getSomeAff() {
    return someAff;
}

public void setSomeAff(Set<AFF_CONFIG> someAff) {
    this.someAff = someAff;
}

public String getAFF_ID() {
    return AFF_ID;
}

public void setAFF_ID(String aFF_ID) {
    AFF_ID = aFF_ID;
}

public String getAFF_NAME() {
    return AFF_NAME;
}

public void setAFF_NAME(String aFF_NAME) {
    AFF_NAME = aFF_NAME;
}

public String getAFF_CODE() {
    return AFF_CODE;
}

public void setAFF_CODE(String aFF_CODE) {
    AFF_CODE = aFF_CODE;
}

由于这是多对一关系,我在一个关系中创建了集合类型,在另一个关系中创建了对象类型(如其他地方定义的那样)。通过扩展 CRUD 并添加查询来创建存储库。删除一堆不同的注释,我将它们包含在内是希望解决空条目问题。

@Repository
public interface MarketRepository extends       CrudRepository<AFF_CONFIG,String> {

Page<AFF_CONFIG> findAll(Pageable pageable);

 @Query("Select a,b from AFF_CONFIG a, AFF b where     a.AFF_ID = b.AFF_ID" )
public List<AFF_CONFIG> getAffData();
} 

即使经过一些修补,应用程序也能正常工作,直到我添加了这些注释。现在出现这个错误:

Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: aff.

最佳答案

我在主管的帮助下解决了这个问题。看来我们必须遵循类和变量的命名规范。还有一处更正是删除集合类型对象并将其更改为仅对象(删除了 aff 类中的 set)。稍后我会将更正后的内容发布出来,以进行比较和对比。

关于java - 使用 Spring Data JPA 访问数据时,会在任一表上创建空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070118/

相关文章:

java - 从 StringBuffer.toString 生成字节数组

java - 如何在使用 hibernate 作为 ORM 时执行基于语言环境的排序

php - 如何使用 php 从 mysql 表中删除超过 30 分钟或 24 小时的数据

java - 为什么数组支持的 Java 集合对其容量施加任意限制?

java - 有没有一种简单的方法可以判断 StackTraceElement 是否来自您的源代码?

php -\通过表单上传链接到数据库时添加

PHP $_SESSION 变量导致 mySQL 出错

java - 将主动查询从 Hibernate 迁移到 EclipseLink 2.0 时出现问题

hibernate - 项目根文件夹中的 ConfigurationException : Could not locate cfg. xml 资源 [hibernate.cfg.xml]

java - 如何将一组基类型对象映射到同一继承树的派生类型中?