Step-by-Step Guide to Creating a Composite Key in Spring with @EmbeddedId Annotation

Step-by-Step Guide to Creating a Composite Key in Spring with @EmbeddedId Annotation

In Hibernate, a composite key is a key that is composed of multiple columns instead of a single column. It is also known as a composite primary key because it uniquely identifies each row in a table. A composite key is useful in scenarios where a single column cannot uniquely identify a row. In Hibernate, a composite key can be defined using the @EmbeddedId annotation. This annotation is used to map a composite primary key to an entity.

Getting started

In database design, a composite key is a combination of two or more columns that uniquely identify a row in a table. In this blog post, we will explore how to create a composite key in Spring.

To create a composite key in Spring, we will use the @EmbeddedId annotation. This annotation is used to map a composite primary key to an entity. To use, we need to create a separate class for the composite key.

Let’s start by creating an example entity called Book. The Book entity has two fields, title and author. We want to use both of these fields as the composite key for the Book entity.

@Entity
public class Book {
@EmbeddedId
private BookId bookId;

// other fields and methods
}

Now we need to create the BookId class. This class should contain the fields that make up the composite key. In our case, the BookId class will contain title and author fields.

@Embeddable
public class BookId implements Serializable {
private String title;
private String author;
// default constructor, getters, and setters
}

Note that the BookId class must be annotated with @Embeddable. This annotation tells Spring that this class should be embedded within the Book entity.

We also need to override the equals and hashCode methods in the BookId class. This is necessary because the BookId class will be used as a key in a Map or Set.

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
BookId bookId \= (BookId) obj;
if (!title.equals(bookId.title)) return false;
return author.equals(bookId.author);
}
@Override
public int hashCode() {
int result \= title.hashCode();
result = 31 * result + author.hashCode();
return result;
}

Finally, we can use the Book entity in our Spring application.

@Repository
public interface BookRepository extends JpaRepository {
}

Here, we are using them BookRepository to interact with the database. The repository extends JpaRepository and takes two types of arguments: Book and BookId. This tells Spring that we want to use the BookId class as the composite key for the Book entity.

In conclusion, creating a composite key in Spring requires creating a separate class for the key and annotating it with @Embeddable. The entity class should be annotated with @EmbeddedId and should contain an instance of the composite key class. We also need to override the equals and hashCode methods in the composite key class. Finally, we can use the repository to interact with the database using the composite key.

Did you find this article valuable?

Support Harsh Gajjar by becoming a sponsor. Any amount is appreciated!