我有一个像这样的JpaRepository

public interface InfosRepository extends JpaRepository<Infos, String> {

}


和Infos类是这样的:

import javax.persistence.*;

@Entity
@Table(name = "infos")
@EntityListeners(Infos .class)
public class Infos {

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

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

    public Infos() { }

    public Infos(String name) {
        this.name= name;
    }

    public Infos(String name, String age) {
        this.age = age;
        this.name= name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name= name;
    }

    public String getAge() { return age; }

    public void setAge(String age) { this.age= age;}

    @Override
    public boolean equals(Object other) {
        return (this == other) ||  this.name.equals( ((Infos) other).name  );
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

}


因此,此类应列出名为infos的postgre表,并带有列名和年龄。除了我没有检索在postgre中具有的所有值并且有人重复之外,该过程起作用。例如我在postgre infos表中:

+-------+-----+
|   name|  age|
+-------+-----+
|charles|   20|
|charles|   32|
|charles|   55|
|    ted|   43|
| albert|   46|
|  clara|   23|
+-------+-----+


但是在我的对象信息中,我看到:

+-------+-----+
|   name|  age|
+-------+-----+
|charles|   55|
|charles|   55|
|charles|   55|
|    ted|   43|
| albert|   46|
|  clara|   23|
+-------+-----+


由于Charles在列ID中,因此我松了20和30

我有这个类来实例化我的对象,直到听postgre

@Service
public class ConsumerService {

   @Autowired
    private InfosRepository infosRepository ;

    @PostConstruct
    public void initializeConsumer() {
        InfosRepository infosRepositoryTest = infosRepository
    }
}


当我在行上放置断点时

InfosRepository infosRepositoryTest = infosRepository


在方法initializeConsumer()中,我估计infosRepository的元素错误(丢失和重复)

你有什么主意吗?

最佳答案

ID应该唯一地标识数据库中的一行。因此,使用这种设计,您应该在表中只有一个“查尔斯”,并且名称列应该是主键。

如果需要几个查尔斯,则需要添加一个包含唯一标识符的列,并将该列映射为实体的ID。

注意:Infos是此类实体的可怕名称。名称应描述实体所代表的含义。它应该是单数,因为此类的一个实例代表一行。更好的名称是例如Person

07-24 15:53