简体   繁体   中英

Hibernate: EmbeddedId with auto increment

Suppose that I have a simple Hibernate entity with auto-incremented id.

@Entity
@Table(name = "product")
public class Product {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;

    private String name;
}

Is it possible to declare id as a type-safe variable? I could apply @EmbeddedId like this.

@Entity
@Table(name = "product")
public class Product {
    @EmbeddedId
    private ProductId id;

    private String name;
    
    @Embeddable
    public static class ProductId implements Serializable {
        @GeneratedValue(strategy = IDENTITY)
        private Long id;

        public Long getId() {
            return id;
        }
    }
}

It works with client-generated IDs, but not with database-generated ones.

Has anyone solved similar problem? What are the possible approaches?

First, you need to annotate ProductId class with @Embeddable like this:

@Embeddable
public static class ProductId implements Serializable {
    private Long id;
    private String name;
}

And, when you save entity, you need to create an instance of ProductId with unique parameters (in your case it is "name" field) as well.

For more information, I suggest you to have a look at here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM