我正在使用Spring Tool Suite版本:3.9.8.RELEASE 使用扩展CRUD的存储库 MySQL表导入CSV文件。
我最初遇到的问题是,从数据库中获取数据时,由于某些原因,“名称”列下的值被重复,并且许多值也丢失了。
经过大量测试,我意识到“名称”下的值是重复的(意味着多个值将具有相同的名称),但是它们也替换了数据库中其他“名称”值(丢失的值)。
我摆脱了“间隔”(Intervals)列,它解决了这个问题,这意味着返回了所有值,没有一个丢失,并且没有重复。我认为发生的事情是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>
答案 0 :(得分:1)
您写道:
@Entity
public class Pattern {
@Id
@GeneratedValue
public String Intervals;
public String Name;
这意味着主键是“间隔”,而不是名称。因此,“名称”属性(至少在Java代码中)没有特别限制,因此可以重复。
如果希望“名称”作为主键,请将@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
)