Spring Boot-Apache Derby复制ListArray对象的ID

时间:2019-01-10 16:21:41

标签: spring derby

这个小项目遵循基本的MVC模式,我使用spring boot和apache derby作为嵌入式数据库。

1)在服务类中添加硬编码对象列表时,它们都共享相同的ID。对此行为有解释吗?

这显示了问题(不要介意“ kkk”对象,我已经解决了这一部分) Screen1

这是我正在使用的对象帐户:

@Entity
public class Account {

@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String owner;
private double budget;
private double budgetInvest;
private double budgetFonction;

public Account() {

}

public Account(String owner, double budget, double budgetInvest, double budgetFonction 
        ) {
    this.owner=owner;
    this.budget = budget;
    this.budgetInvest = budgetInvest;
    this.budgetFonction = budgetFonction;
}

public Account (String owner, double budget) {
    this.owner = owner;
    this.budget=budget;
}

public Account (String owner) {
    this.owner=owner;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public double getBudget() {
    return budget;
}

public void setBudget(double budget) {
    this.budget = budget;
}

public double getBudgetInvest() {
    return budgetInvest;
}

public void setBudgetInvest(double budgetInvest) {
    this.budgetInvest = budgetInvest;
}

public double getBudgetFonction() {
    return budgetFonction;
}

public void setBudgetFonction(double budgetFonction) {
    this.budgetFonction = budgetFonction;
}

public String getOwner() {
    return owner;
}

public void setOwner(String owner) {
    this.owner = owner;
}




}

以下是负责在视图内显示对象的行:

    <tr th:each="account : ${accounts}">
                                            <td th:text="${account.id}">id</td>
                                            <td><a href="#" th:text="${account.owner}">Title
                                                    ...</a></td>
                                            <td th:text="${account.budget}">Text ...</td>
                                        </tr>

这是控制器:

@Controller
public class AccountController {

@Autowired
private AccountService accountService;

@RequestMapping(value="/", method=RequestMethod.GET)
public String index() {
  return "index";
}

@RequestMapping(value="/accountAdd", method=RequestMethod.GET)
public String addAccount(Model model) {
  model.addAttribute("account", new Account());
  return "accountAdd";
}

@RequestMapping(value="/accountAdd", method=RequestMethod.POST)
public String postAccount(@ModelAttribute Account account) {
  accountService.addAccount(account);
  return "redirect:listAccount";
}

@RequestMapping(value="/listAccount", method=RequestMethod.GET)
public String listAccount(Model model) {
  System.out.println(accountService.getAllAccounts());
  model.addAttribute("accounts",accountService.getAllAccounts());
  return "listAccount";
}


}

最后是服务类:

@Service
public class AccountService {

@Autowired
private AccountRepository accountRepository;


public List<Account> getAllAccounts(){
List<Account>accounts = new ArrayList<>(Arrays.asList(
            new Account("Maths Department",1000000,400000,600000),
            new Account("Physics Department",7000000,200000,500000),
            new Account("Science Department",3000000,700000,1000000)
            ));
    accountRepository.findAll().forEach(accounts::add);
    return accounts;
}

public Account getAccount(long id) {
    return accountRepository.findById(id).orElse(null);
}

public void addAccount(Account account) {
    accountRepository.save(account);
}
public void updateAccount(long id, Account account) {
    accountRepository.save(account);
}
public void deleteAccount(long id) {
    accountRepository.deleteById(id);
}
}

1 个答案:

答案 0 :(得分:0)

好吧,所以虽然我还没有找到确切的答案,为什么它会影响静态列表中每个对象的相同ID。

我发现了一个优雅的解决方法,不仅可以解决问题,而且可以增强代码的结构。

与其执行我尝试执行的任何野蛮初始化,不如在主类中执行此操作更好:

@SpringBootApplication
public class PayfeeApplication {

@Autowired
private AccountRepository accountRepository;

public static void main(String[] args) {
    SpringApplication.run(PayfeeApplication.class, args);

}

@Bean
InitializingBean sendDatabase() {
    return () -> {
        accountRepository.save(new Account("Maths Department",1000000,400000,600000));
        accountRepository.save(new Account("Physics Department",7000000,200000,500000));
        accountRepository.save(new Account("Science Department",3000000,700000,1000000));
      };
   }

}