Java MySQL将返回或不返回重复的行,这取决于特定列是否存在。为什么?

Java MySQL将返回或不返回重复的行,这取决于特定列是否存在。为什么?,java,mysql,spring-boot,Java,Mysql,Spring Boot,我使用的是Spring工具套件版本:3.9.8.0 使用扩展CRUD的存储库 MySQL表导入CSV文件 我最初遇到的问题是,由于某些原因,“Name”列下的值被重复,并且在从数据库获取时,许多值丢失 经过大量测试后,我意识到“Name”下的值是重复的(这意味着多个值将具有相同的名称),但它们也替换了数据库中的其他“Name”值(缺少的值) 我去掉了“interval”列,它解决了这个问题,这意味着所有的值都返回了,没有一个丢失,也没有重复。我认为MySQL会以某种方式使用“Interval”列

我使用的是Spring工具套件版本:3.9.8.0 使用扩展CRUD的存储库 MySQL表导入CSV文件

我最初遇到的问题是,由于某些原因,“Name”列下的值被重复,并且在从数据库获取时,许多值丢失

经过大量测试后,我意识到“Name”下的值是重复的(这意味着多个值将具有相同的名称),但它们也替换了数据库中的其他“Name”值(缺少的值)

我去掉了“interval”列,它解决了这个问题,这意味着所有的值都返回了,没有一个丢失,也没有重复。我认为MySQL会以某种方式使用“Interval”列中的内容,因为有些时间间隔是重复的(例如10:00-10:30可能出现多次,但与不同的名称值相关)

我的问题是为什么会发生这种情况?是因为“间隔”栏的格式吗?(它是varchar(255),但写的是“00:00-00:00”

@控制器
公共阶级模式{
@自动连线
私人回购;
@请求映射(“”)
公共字符串索引(){
返回“索引”;
}
@请求映射(“searchAll”)
公共模型和视图模式(){
ModelAndView mv=新的ModelAndView(“showinfo”);
ArrayList模式=(ArrayList)repo.findAll();
mv.addObject(“模式”,模式);
返回mv;
}
@实体
公共阶级模式{
@身份证
@生成值
公共字符串间隔;
公共字符串名称;
公共字符串代码;
公共字符串持续时间;
公共长Id;
显示信息
所有代理活动
间隔
名称
密码
期间
${i.interval}
${i.name}
${i.code}
${i.duration}
你写道:

  @Entity
  public class Pattern {


      @Id
      @GeneratedValue

      public String Intervals;

      public String Name;

这意味着主键是“interval”,而不是name。因此,“name”属性没有特别的限制(至少在java代码中是这样),因此可能存在重复项

如果要将“Name”作为主键,请将
@Id
移动到
Name
声明之前的行中。 但是您得到了一个名为
Id
的属性,您可能希望它成为主键。为了简化操作,您可能还希望自动生成此属性,请将
@Id
@GeneratedValue
移动到
Id
声明之前

例如:

  @Entity
  public class Pattern {

      public String intervals;

      public String name;

      @Id
      @GeneratedValue
      public Long id;


PS:请使用java命名约定:驼峰大小写的属性:小写的第一个字符(
name
,而不是
name

表中的所有列都是VARCHAR(255),Id除外(int,自动递增)请参阅以文本而非图像形式提供数据。我们还需要知道预期结果。我们还需要知道生成的查询。另外,表结构
SHOW CREATE table table
也会很有用。感谢您的反馈,在阅读了链接提供的信息后,即使问题不需要回答,也很有意义很多细节。这就解决了问题,非常感谢。谢谢你的反馈,我一定会在这方面有所改进。
  @Entity
  public class Pattern {

      public String intervals;

      public String name;

      @Id
      @GeneratedValue
      public Long id;