Vin*_*loo 3 java database spring hibernate jpa
我被迫在一个小项目中使用 Maven、Hibernate、Spring 和 JPA 存储库。我高兴地认为这里找到的信息
http://docs.spring.io/spring-data/jpa/docs/1.4.2.RELEASE/reference/html/jpa.repositories.html
至少足以创建一个简单的应用程序。不幸的是,事实并非如此。我已经设法从 MySQL 数据库读取数据,但目前无法插入任何数据。
这是一个简单的“用户”模型类。
@Entity
@Table(name = "ctuser")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long uid;
@Column(name = "Gmail", nullable = false)
private String gmail;
public String getGmail() {
return gmail;
}
public void setGmail(String gmail) {
this.gmail = gmail;
}
@Override
public String toString() {
return getGmail();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个适当的存储库接口......
package put.io.come_together.service.persistance.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import put.io.come_together.model.User;
public interface UserRepository extends JpaRepository<User, Long> {
User findUserByUid(long uid);
User save (User obj);
}
Run Code Online (Sandbox Code Playgroud)
...服务的接口...
public interface UserService {
User getUser(long uid);
User addUser(User obj);
List<User> getAll();
}
Run Code Online (Sandbox Code Playgroud)
...以及接口的实现。
@Service
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
@Autowired
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public User getUser(long uid) {return userRepository.findUserByUid(uid);
}
@Transactional
@Override
public User addUser(User obj) {return this.userRepository.saveAndFlush(obj);}
@Override
public List<User> getAll() {
return userRepository.findAll();
}
Run Code Online (Sandbox Code Playgroud)
最后,我尝试将数据呈现为数据并将某些内容插入数据库。
@Controller
public class HomePageController {
@Autowired
private UserService userService;
private static final String USER_MAP_KEY = "groups";
private static final String USER_LIST_TEMPLATE_NAME = "groupList";
@RequestMapping("/")
String hello(Map<String, Object> model) {
User osoba = new User();
osoba.setGmail("ADAMWEST");
userService.addUser(osoba);
List<User> userGroupsList = userService.getAll();
model.put(USER_MAP_KEY, userGroupsList);
return USER_LIST_TEMPLATE_NAME;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我省略该行userService.addUser(osoba);,一切都会正常。我可以看到从数据库读取的数据整齐地排列在一起。但是当我尝试实际使用该.addUser()方法时,我的本地主机会显示一个白色标签错误页面。
白标错误页面
此应用程序没有 /error 的显式映射,因此您将其视为后备。2015 年 4 月 19 日星期日 09:36:52 发生意外错误(类型 = 内部服务器错误,状态 = 500)。无法执行语句;嵌套异常是 org.hibernate.exception.GenericJDBCException:无法执行语句
你能告诉我我做错了什么吗?我已经尝试解决这个问题有一段时间了,但彻底失去了希望。
这是异常的堆栈跟踪。该错误涉及字段“UID”没有默认值,但我将其标记为@Id 字段。我还删除了整个数据库并重新设置它,因为它帮助了遇到类似问题的人。
@Entity
@Table(name = "ctuser")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long uid;
@Column(name = "Gmail", nullable = false)
private String gmail;
public String getGmail() {
return gmail;
}
public void setGmail(String gmail) {
this.gmail = gmail;
}
@Override
public String toString() {
return getGmail();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49347 次 |
| 最近记录: |