Practical উদাহরণ: User Input Validation

JPA এবং Hibernate Validator Integration - জেপিএ  (JPA) - Java Technologies

276

JPA (Java Persistence API) ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়, কিন্তু User Input Validation মূলত অ্যাপ্লিকেশনের লজিকাল স্তরে প্রযোজ্য। যদিও JPA ডেটা ম্যানেজমেন্টের জন্য ব্যবহৃত হয়, কিন্তু ইউজারের ইনপুটকে যাচাই করার জন্য Bean Validation (JSR 303/JSR 380) এর মতো প্রযুক্তি ব্যবহার করা হয়। JPA এবং Bean Validation একত্রে কাজ করলে, আপনি ইনপুট ভ্যালিডেশন করতে পারেন এবং ডেটাবেসে শুধুমাত্র বৈধ ডেটা ইনসার্ট করতে পারেন।

Java Bean Validation এর জন্য একটি সাধারণ লাইব্রেরি হল Hibernate Validator, যা JPA এর সাথে ব্যবহৃত হয়।

এখানে, User Input Validation এর জন্য একটি Practical উদাহরণ দেওয়া হবে যেখানে JPA, Bean Validation এবং Hibernate Validator ব্যবহার করা হবে।

User Input Validation with JPA


1. Dependencies Setup (pom.xml)

যেহেতু Hibernate Validator JPA এর সাথে কাজ করার জন্য প্রয়োজন, প্রথমে আপনাকে আপনার প্রজেক্টে প্রয়োজনীয় ডিপেনডেন্সি যুক্ত করতে হবে (এটি Maven প্রকল্পের জন্য):

<dependencies>
    <!-- JPA Dependency -->
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>

    <!-- Hibernate Validator Dependency (Bean Validation) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.13.Final</version>
    </dependency>

    <!-- Validation API -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>

    <!-- Hibernate Core Dependency (for JPA implementation) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.30.Final</version>
    </dependency>
</dependencies>

এই ডিপেনডেন্সিগুলি আপনার প্রজেক্টে যুক্ত করলে, আপনি Hibernate Validator এবং JPA কে একত্রে ব্যবহার করতে পারবেন।


2. Entity Class with Validation Annotations

এখানে একটি User Entity ক্লাস তৈরি করা হবে যেখানে User Input Validation প্রয়োগ করা হবে।

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Email;
import javax.validation.constraints.Size;

@Entity
public class User {
    @Id
    private Long id;

    @NotNull(message = "Name cannot be null")
    @Size(min = 2, max = 50, message = "Name must be between 2 and 50 characters")
    private String name;

    @Email(message = "Email should be valid")
    @NotNull(message = "Email cannot be null")
    private String email;

    @NotNull(message = "Age cannot be null")
    private Integer age;

    // Getter and Setter methods
}

এখানে, Bean Validation অ্যানোটেশনগুলো ব্যবহার করা হয়েছে:

  • @NotNull: এটি নিশ্চিত করে যে ফিল্ডটি null হতে পারবে না।
  • @Size: এটি নিশ্চিত করে যে স্ট্রিং এর দৈর্ঘ্য একটি নির্দিষ্ট সীমার মধ্যে থাকবে (যেমন, নামের দৈর্ঘ্য ২ থেকে ৫০ ক্যারেক্টার হতে হবে)।
  • @Email: এটি ইমেইল ফিল্ডের জন্য একটি বৈধ ইমেইল ঠিকানা যাচাই করে।

3. Validating User Input Using Hibernate Validator

ইউজারের ইনপুট ভ্যালিডেট করার জন্য Hibernate Validator ব্যবহৃত হবে, যেখানে ValidatorFactory এবং Validator ব্যবহার করা হয়।

Example - Validation in Service Layer:

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;

import java.util.Set;

public class UserService {

    public void validateUser(User user) {
        // Create ValidatorFactory and Validator
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        // Validate User object
        Set<ConstraintViolation<User>> violations = validator.validate(user);

        // Check if there are any validation violations
        if (!violations.isEmpty()) {
            for (ConstraintViolation<User> violation : violations) {
                System.out.println("Validation error: " + violation.getMessage());
            }
        } else {
            System.out.println("User is valid.");
        }
    }
}

এখানে, Validator ব্যবহার করা হচ্ছে যা User অবজেক্টের সকল ফিল্ডে অ্যানোটেশনভিত্তিক ভ্যালিডেশন চেক করে এবং যদি কোনো ত্রুটি থাকে তবে তা দেখানো হয়।

Service Method Usage:

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setName("John");
        user.setEmail("john.doe@example");
        user.setAge(25);

        // Validate User object
        UserService userService = new UserService();
        userService.validateUser(user);
    }
}

এখানে, User অবজেক্টে Email ফিল্ডটি একটি অবৈধ ইমেইল ঠিকানা (যেমন: "john.doe@example") দিয়ে দেওয়া হয়েছে। তাই, যখন আপনি validateUser() মেথড কল করবেন, এটি ভ্যালিডেশন ত্রুটি দেখাবে, যেমন:

Validation error: Email should be valid

4. Persisting Valid Data to the Database

যখন আপনি ইউজারের ইনপুট ভ্যালিডেশন সফলভাবে সম্পন্ন করবেন, তখন JPA ব্যবহার করে ডেটাবেসে সেভ করতে পারবেন। এই ক্ষেত্রে, ডেটাবেসে সেভ করার জন্য EntityManager ব্যবহার করা হবে।

Persist Valid User Data:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class UserService {

    private EntityManagerFactory emf;

    public UserService() {
        emf = Persistence.createEntityManagerFactory("myJpaUnit");
    }

    public void saveUser(User user) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();

        // Validate User input before persisting
        validateUser(user);

        // Save valid user to the database
        em.persist(user);
        em.getTransaction().commit();
        em.close();
    }
}

Usage:

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setName("John");
        user.setEmail("john.doe@example.com");
        user.setAge(25);

        // Persist valid User
        UserService userService = new UserService();
        userService.saveUser(user);
    }
}

এখানে, saveUser() মেথডের মাধ্যমে ইউজারের ইনপুট ভ্যালিডেশনের পরে ডেটাবেসে সেভ করা হচ্ছে।


সারাংশ


JPA User Input Validation Java Bean Validation (JSR 303/JSR 380) ব্যবহার করে করা হয়, যেখানে Hibernate Validator একটি জনপ্রিয় লাইব্রেরি। @NotNull, @Size, @Email এর মতো অ্যানোটেশন ব্যবহার করে আপনি ইউজারের ইনপুট ভ্যালিডেশন করতে পারেন। একবার ইনপুট ভ্যালিড হলে, JPA EntityManager ব্যবহার করে ডেটাবেসে ডেটা সেভ করা যায়।

এই পদ্ধতি ব্যবহার করে, আপনি আপনার অ্যাপ্লিকেশনে সুরক্ষিত এবং রক্ষিত ইউজার ইনপুট ভ্যালিডেশন নিশ্চিত করতে পারবেন, যা আপনার অ্যাপ্লিকেশনের ডেটা এক্সটেনশনের সময় ত্রুটির সম্ভাবনা কমাবে।

Content added By
Promotion

Are you sure to start over?

Loading...