我有一个像这样的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
。