如何在JpaRepository中执行序列?
然后从实体中读取id。
public interface EmailRepository extends JpaRepository<Email, Long> {
}
emailService.persistEmail(from, to, subject, content);
@Inject
private EmailRepository emailRepository;
@Transactional
public void persistEmail(String mailFrom, String mailTo, String subject, String content) {
Email email = new Email(mailFrom, mailTo, content, subject);
Email persisted = emailRepository.save(email);
persisted.getId();
log.debug("Persisted Information for Mail: {}", persisted.getMailFrom());
}
@Data
@Entity
@NoArgsConstructor
@EqualsAndHashCode(of = "id")
@Table(name = "mails")
public class Email {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "mail_from", nullable = false, length = 250)
private String mailFrom;
@Column(name = "mail_to", nullable = false, length = 250)
private String mailTo;
@Column(name = "mail_subject", nullable = false, length = 200)
private String subject;
@Column(name = "mail_content", nullable = false, length = 5000)
private String content;
public Email(String mailFrom, String mailTo, String subject, String content) {
this.mailFrom = mailFrom;
this.mailTo = mailTo;
this.subject = subject;
this.content = content;
}
}
我无法持久,因为id为null。有任何想法吗。另外我怎么能忽略在没有id
的lambook中创建一个构造函数答案 0 :(得分:0)
我认为您缺少Id的标签。您是否尝试使用@TableGenerator标签,如下所示?
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.TABLE, generator="EMAIL_SEQ")
@TableGenerator(name="EMAIL_SEQ", table="SequenceKey", pkColumnName="SeqKey", pkColumnValue="EmailBean", valueColumnName="Seq" )
private Long id;
答案 1 :(得分:0)
见这里
How to set auto increment primary key in PostgreSQL?
在这里
JPA and PostgreSQL with GenerationType.IDENTITY
如果您想使用@GeneratedValue(strategy = GenerationType.IDENTITY)
,那么您的ID列必须是SERIAL
类型,而不是当前的integer
。