我正在使用 Spring Tool Suite 版本:3.9.8.RELEASE 使用扩展 CRUD 的存储库 MySQL表导入CSV文件。
我最初遇到的问题是,由于某种原因,从数据库获取数据时,“名称”列下的值重复,并且许多值丢失。
经过大量测试后,我意识到“名称”下的值被重复(意味着多个值将具有相同的名称),但它们也替换了数据库中的其他“名称”值(丢失的值)。
我去掉了“间隔”列,它解决了问题,这意味着所有值都已返回,没有一个丢失,并且没有重复。我认为发生的情况是,MySQL 以某种方式遵循“间隔”列中的内容,因为某些间隔是重复的(例如 10:00-10:30 可能会出现多次,但与不同的名称值相关)
我的问题是为什么会发生这种情况?是因为“间隔”列的格式吗? (它是 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;
这意味着主键是“Intervals”,而不是名称。因此,对“Name”属性没有特别的限制(至少在java代码中),因此可能会出现重复。
如果您希望“Name”为主键,请将@Id
移到Name
声明之前的行上。
但是您有一个名为 Id
的属性,您可能认为它是主键。为了使事情变得更简单,您可能还希望自动生成此属性,请将 @Id
和 @GenerateValue
移动到 Id
声明之前
示例:
@Entity
public class Pattern {
public String intervals;
public String name;
@Id
@GeneratedValue
public Long id;
PS:请使用java命名约定:属性采用驼峰式大小写:第一个字符小写(name
,而不是Name
)
关于java - MySQL 将或不会返回重复行,具体取决于特定列是否存在。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56563176/