java-使用Hibernate将空值插入到外键字段中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-使用Hibernate将空值插入到外键字段中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3618字,纯文字阅读大概需要6分钟。
内容图文
我有一个带有getter,setter方法和从问题到标签的OneToMany关系以及从问题到用户的OneToOne关系的Question实体和Tag实体
public class Question {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(name="title")
private String title;
@Column(name="body")
private String body;
@Temporal(TemporalType.DATE)
@Column(name="date_created")
private Date date_created;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="user_id")
private User user;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="tag_id")
private Tag tag;
@Column(name="answer_count")
private int answer_count;
@Column(name="view_count")
private int view_count;
public Question() {
}
标签实体
public class Tag {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(name="name")
private String name;
@Column(name="username")
private String username;
@Temporal(TemporalType.DATE)
@Column(name="date_created")
private Date date_created;
public Tag() {
}
当我尝试使用邮递员插入具有以下详细信息的问题时:
{
"title": "stefanyyyxx",
"body": "stefandoyee44",
"date_created": "2019-02-27",
"user_id" : 1,
"tag_id": 1,
"answer_count": 0,
"view_count": 0
}
QuestionRepository.java:
@Override
public void save(Question theQuestion) {
// get the current hibernate session
Session currentSession = entityManager.unwrap(Session.class);
// save employee
currentSession.saveOrUpdate(theQuestion);
}
尽管我使用JoinColumn(),但正在为user_id和tag_id插入空值.
MySQL:
解决方法:
正如@Karol Dowbecki所建议的那样,
将JSON转换为DTO对象,并使用该DTO从其各自的存储库中获取用户,标记实体.
最后,创建Question实体对象并将其存储.
问题实体
@Entity
@Table(name = "question")
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "title")
private String title;
@Column(name = "body")
private String body;
@Temporal(TemporalType.DATE)
@Column(name = "date_created")
private Date dateCreated;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "tag_id")
private Set<Tag> tag;
@Column(name = "answer_count")
private int answerCount;
@Column(name = "view_count")
private int viewCount;
}
用户实体
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
标签实体
@Entity
@Table(name = "tag")
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "username")
private String username;
@Temporal(TemporalType.DATE)
@Column(name = "date_created")
private Date dateCreated;
}
DTO等级
public class QuestionDTO {
private Long id;
private String title;
private String body;
private Date dateCreated;
private Long user;
private Long tag;
private int answerCount;
private int viewCount;
}
测试班
@Service
public class TestService {
@Autowired
private QuestionRepository questionRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private TagRepository tagRepository;
public void addQuestion(QuestionDTO dto) {
Tag tag = null;
User user = null;
Question question = null;
Set<Tag> tags = null;
tag = tagRepository.findById(dto.getTag());
tags = new HashSet<>();
tags.add(tag);
user = userRepository.findById(dto.getUser());
question = new Question();
question.setTag(tags);
question.setUser(user);
question.setId(dto.getId());
question.setBody(dto.getBody());
question.setTitle(dto.getTitle());
question.setViewCount(dto.getViewCount());
question.setAnswerCount(dto.getAnswerCount());
question.setDateCreated(dto.getDateCreated());
questionRepository.save(question);
}
}
注意 :
Question和Tag之间的关系在OneToMany中,您必须使用Collection类型.
内容总结
以上是互联网集市为您收集整理的java-使用Hibernate将空值插入到外键字段中全部内容,希望文章能够帮你解决java-使用Hibernate将空值插入到外键字段中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。