Bird
Raised Fist0
Spring Bootframework~5 mins

Column mapping with @Column in Spring Boot

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

The @Column annotation helps connect a class field to a specific database column. It tells Spring Boot how to save and read data from the database.

When you want to name a database column differently from your class field.
When you want to set rules like column length or if it can be empty.
When you want to control how data is stored, like making a column unique.
When you want to add comments or specify column type in the database.
Syntax
Spring Boot
@Column(name = "column_name", nullable = false, length = 100, unique = true)

name sets the exact database column name.

nullable controls if the column can be empty (true or false).

Examples
This maps the email field to the user_email column in the database.
Spring Boot
@Column(name = "user_email")
private String email;
This makes sure username cannot be empty and limits it to 50 characters.
Spring Boot
@Column(nullable = false, length = 50)
private String username;
This ensures the phoneNumber is unique in the database.
Spring Boot
@Column(unique = true)
private String phoneNumber;
Sample Program

This example shows a User entity where the name field is mapped to the user_name column with rules: it cannot be empty and has max length 100. The email field must be unique in the database.

Spring Boot
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Column;

@Entity
public class User {

    @Id
    private Long id;

    @Column(name = "user_name", nullable = false, length = 100)
    private String name;

    @Column(unique = true)
    private String email;

    // Constructors, getters, setters
    public User() {}

    public User(Long id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}
OutputSuccess
Important Notes

If you don't use @Column, Spring Boot uses the field name as the column name by default.

Use @Column to avoid mistakes when your database column names differ from your Java fields.

Always check your database schema matches your entity mappings to avoid errors.

Summary

@Column links a Java field to a database column.

You can set column name, length, uniqueness, and nullability.

This helps keep your Java code and database in sync.

Practice

(1/5)
1. What is the main purpose of the @Column annotation in Spring Boot?
easy
A. To define a primary key for the entity
B. To create a new database table automatically
C. To configure the database connection settings
D. To map a Java field to a specific database column

Solution

  1. Step 1: Understand the role of @Column

    The @Column annotation is used to link a Java class field to a database column, specifying details like name and constraints.
  2. Step 2: Differentiate from other annotations

    Other annotations like @Id define primary keys, and database connection settings are configured elsewhere, not with @Column.
  3. Final Answer:

    To map a Java field to a specific database column -> Option D
  4. Quick Check:

    @Column maps field to column [OK]
Hint: Remember: @Column links fields to columns directly [OK]
Common Mistakes:
  • Confusing @Column with @Id for primary keys
  • Thinking @Column creates tables
  • Mixing @Column with database connection setup
2. Which of the following is the correct way to specify a column name and length using @Column?
easy
A. @Column(name = "user_name", length = 50)
B. @Column(columnName = "user_name", size = 50)
C. @Column(name = user_name, length = 50)
D. @Column(name = "user_name", maxLength = 50)

Solution

  1. Step 1: Check correct attribute names

    The correct attributes for @Column are 'name' for column name and 'length' for string length.
  2. Step 2: Validate syntax

    Attributes must be strings in quotes for names; length is an integer. @Column(name = "user_name", length = 50) uses correct syntax and attribute names.
  3. Final Answer:

    @Column(name = "user_name", length = 50) -> Option A
  4. Quick Check:

    Use name and length attributes correctly [OK]
Hint: Use 'name' and 'length' exactly in @Column [OK]
Common Mistakes:
  • Using wrong attribute names like columnName or maxLength
  • Forgetting quotes around string values
  • Using variables without quotes for name
3. Given the entity field:
@Column(name = "email", unique = true, nullable = false)
private String email;

What will happen if you try to save two entities with the same email?
medium
A. The application will throw a null pointer exception
B. The database will throw a unique constraint violation error
C. The second entity will overwrite the first one silently
D. Both entities will be saved without error

Solution

  1. Step 1: Understand unique constraint

    The 'unique = true' attribute enforces that no two rows can have the same value in this column.
  2. Step 2: Predict behavior on duplicate insert

    Trying to save a duplicate email will cause the database to reject the insert/update with a unique constraint violation error.
  3. Final Answer:

    The database will throw a unique constraint violation error -> Option B
  4. Quick Check:

    unique = true prevents duplicates [OK]
Hint: unique=true means no duplicate values allowed [OK]
Common Mistakes:
  • Assuming duplicates are allowed with unique=true
  • Confusing unique with nullable
  • Expecting application to handle duplicates silently
4. Consider this code snippet:
@Column(name = "age", nullable = false)
private Integer age;

What is wrong if the application allows saving an entity with age = null without error?
medium
A. The database column is not set to NOT NULL, so nullable=false is ignored
B. The @Column annotation does not enforce nullability at the database level
C. The field type Integer allows null, so nullable=false has no effect
D. The entity is missing @NotNull validation annotation

Solution

  1. Step 1: Understand nullable attribute

    The 'nullable = false' in @Column tells JPA to generate a NOT NULL constraint in the database schema.
  2. Step 2: Recognize runtime enforcement

    @Column does not validate null values in Java code; it only affects database schema. If schema is not updated, nulls can be saved.
  3. Final Answer:

    The database column is not set to NOT NULL, so nullable=false is ignored -> Option A
  4. Quick Check:

    nullable=false affects DB schema, not Java validation [OK]
Hint: @Column nullable=false sets DB constraint, not Java checks [OK]
Common Mistakes:
  • Thinking nullable=false validates Java field nulls
  • Assuming Integer type disables nulls
  • Confusing @Column with validation annotations
5. You want to map a Java field private String phoneNumber; to a database column named phone_num that must be unique and cannot be null, with a maximum length of 15 characters. Which is the correct @Column annotation to use?
hard
A. @Column(name = "phone_num", unique = false, nullable = true, length = 15)
B. @Column(name = "phoneNumber", unique = true, nullable = false, length = 15)
C. @Column(name = "phone_num", unique = true, nullable = false, length = 15)
D. @Column(name = "phone_num", unique = true, nullable = false)

Solution

  1. Step 1: Match column name and constraints

    The column name must be 'phone_num', unique true, nullable false, and length 15 as per requirements.
  2. Step 2: Check each option

    @Column(name = "phone_num", unique = true, nullable = false, length = 15) matches all requirements exactly. @Column(name = "phoneNumber", unique = true, nullable = false, length = 15) uses wrong column name. @Column(name = "phone_num", unique = false, nullable = true, length = 15) allows null and not unique. @Column(name = "phone_num", unique = true, nullable = false) misses length attribute.
  3. Final Answer:

    @Column(name = "phone_num", unique = true, nullable = false, length = 15) -> Option C
  4. Quick Check:

    Use correct name, unique, nullable, and length [OK]
Hint: Set all attributes explicitly to match requirements [OK]
Common Mistakes:
  • Using Java field name instead of column name
  • Forgetting unique or nullable constraints
  • Missing length attribute for string columns