java - MySQL 将或不会返回重复行,具体取决于特定列是否存在。为什么?
问题描述
我正在使用 Spring Tool Suite 版本:3.9.8.RELEASE 使用扩展 CRUD MySQL 表的存储库导入 CSV 文件。
我最初遇到的问题是,由于某些原因,“名称”列下的值被重复,并且在从数据库中获取时,许多值都丢失了。
经过大量测试后,我意识到“名称”下的值被重复(意味着多个值将具有相同的名称),但它们也替换了数据库中的其他“名称”值(那些缺失的值)。
我去掉了“间隔”列,它解决了这个问题,这意味着所有的值都被返回了,没有一个丢失,也没有重复。我认为发生的事情是 MySQL 以某种方式通过“间隔”列中的内容,因为某些间隔是重复的(例如 10:00-10:30 可能出现多次,但与不同的 Name 值有关)
我的问题是为什么会这样?是因为“间隔”列的格式吗?(它是 varchar(255) 但它写为“00:00-00:00”
@Controller
public class Patterns {
@Autowired
private PatternRepository repo;
@RequestMapping("")
public String index() {
return "index";
}
@RequestMapping("searchAll")
public ModelAndView patterns() {
ModelAndView mv = new ModelAndView("showinfo");
ArrayList<Pattern> pattern = (ArrayList<Pattern>) repo.findAll();
mv.addObject("pattern", pattern);
return mv;
}
@Entity
public class Pattern {
@Id
@GeneratedValue
public String Intervals;
public String Name;
public String Code;
public String Duration;
public Long Id;
<h1>show info</h1>
<fieldset>
<legend>All Agent Activity</legend>
<table border="1" cellpadding="5">
<tr>
<th>Intervals</th>
<th>Name</th>
<th>Code</th>
<th>Duration</th>
</tr>
<c:forEach items="${pattern}" var = "i" >
<tr>
<td>${ i.intervals }</td>
<td>${ i.name }</td>
<td>${ i.code }</td>
<td>${ i.duration }</td>
</tr>
</c:forEach>
</table>
</fieldset>
解决方案
你写了:
@Entity
public class Pattern {
@Id
@GeneratedValue
public String Intervals;
public String 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
)
推荐阅读
- tfs - 为什么在 Visual Studio 2019 (v16.6.5) 中的解决方案上获取最新版本(递归)会下载整个分支?
- r - R 脚本 CLI 参数
- uml - UML/SysML:派生属性的 OCL 规范,计算特定关系/刻板印象的数量
- css - 试图让文本在波浪中移动,但它不起作用
- python - 在哪里可以找到 PyCharm 源方法签名?
- java - 在ConcurrentHashMap的传递方法中,没看懂“i >= n”和“i + n >= nextn”这两个条件的意思
- r - 试图在 R 中选择列,但它只假设行
- javascript - NestJS - 使用装饰器查找用户
- python - Python - 如何使用函数的文档字符串和代码示例
- ios - 将数组转移到另一个视图中的数组(Segue)