我有一个像这样的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的信息表中有:
+-------+-----+
| 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|
+-------+-----+
由于查尔斯在列id
,我松了20和30我有这个类来实例化我的对象听postgre
@Service
public class ConsumerService {
@Autowired
private InfosRepository infosRepository ;
@PostConstruct
public void initializeConsumer() {
InfosRepository infosRepositoryTest = infosRepository
}
}
当我在行
处放置一个断点时InfosRepository infosRepositoryTest = infosRepository
方法initializeConsumer()中的我评估了infosRepository,它有错误的元素(丢失和重复)
你有什么想法吗?
答案 0 :(得分:3)
ID应该唯一标识数据库中的行。所以,通过这种设计,你应该只有一个&#34;查尔斯&#34;在表中,name列应该是主键。
如果您需要多个查询,则需要添加包含唯一标识符的列,并将该列映射为实体的ID。
注意:Infos
是这样一个实体的可怕名称。名称应描述实体代表的内容。它应该是单数,因为此类的实例表示一个行。例如,更好的名称是Person
。