如何在JpaRepository中执行序列?

时间:2017-12-01 13:47:45

标签: java jpa spring-data spring-data-jpa

如何在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中创建一个构造函数

2 个答案:

答案 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