JPA Entities
java
Generate JPA @Entity classes with annotations from SQL schema
Example Output
Generated from the pet-store sample schema:
Adoption.java
java
import jakarta.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Entity
@Table(name = "adoptions")
public class Adoption {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "pet_id")
@Column(nullable = false)
private int petId;
@ManyToOne
@JoinColumn(name = "owner_id")
@Column(nullable = false)
private int ownerId;
@Column(nullable = false)
private LocalDateTime adoptedAt;
@Column(nullable = false)
private BigDecimal adoptionFee;
}AdoptionsAuditLog.java
java
import jakarta.persistence.*;
import java.time.OffsetDateTime;
@Entity
@Table(name = "adoptions_audit_log")
public class AdoptionsAuditLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private String tableName;
@Column(nullable = false)
private String operation;
private String oldData;
private String newData;
@Column(nullable = false)
private OffsetDateTime changedAt;
}Category.java
java
import jakarta.persistence.*;
import jakarta.validation.constraints.NotEmpty;
@Entity
@Table(name = "categories")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false)
@NotEmpty
private String name;
private String description;
}LegacyInventory.java
java
import jakarta.persistence.*;
@Entity
@Table(name = "legacy_inventory")
public class LegacyInventory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String itemName;
private String oldSku;
private Integer quantity;
}Location.java
java
import jakarta.persistence.*;
@Entity
@Table(name = "locations")
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String address;
@Column(nullable = false)
private String city;
private String zip;
}MedicalRecord.java
java
import jakarta.persistence.*;
import java.time.LocalDate;
@Entity
@Table(name = "medical_records")
public class MedicalRecord {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "pet_id")
@Column(nullable = false)
private int petId;
@Column(nullable = false)
private LocalDate visitDate;
@Column(nullable = false)
private String diagnosis;
private String treatment;
private String vetName;
}Owner.java
java
import jakarta.persistence.*;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import java.time.LocalDateTime;
@Entity
@Table(name = "owners")
public class Owner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false)
@NotEmpty
private String name;
@Column(nullable = false)
@Pattern(regexp = "^[^@]+@[^@]+\\.[^@]+$")
private String email;
@Size(min = 7, max = 20)
private String phone;
private LocalDateTime createdAt;
}Pet.java
java
import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Pattern;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Entity
@Table(name = "pets")
public class Pet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "category_id")
private Integer categoryId;
@Column(nullable = false)
@NotEmpty
private String name;
@Column(nullable = false)
@Pattern(regexp = "^[A-Z]{3}-[0-9]{4}$")
private String sku;
@Column(nullable = false)
@Min(0)
@Max(99999)
private BigDecimal price;
private String internalNotes;
@Column(nullable = false)
private String status;
private LocalDateTime createdAt;
}Review.java
java
import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import java.time.LocalDateTime;
@Entity
@Table(name = "reviews")
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false)
private int petId;
@Column(nullable = false)
private int ownerId;
@Column(nullable = false)
@Min(1)
@Max(5)
private int rating;
private String body;
@ManyToOne
@JoinColumn(name = "location_id")
private Integer locationId;
private LocalDateTime createdAt;
}StaffAuditLog.java
java
import jakarta.persistence.*;
import java.time.OffsetDateTime;
@Entity
@Table(name = "staff_audit_log")
public class StaffAuditLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private String tableName;
@Column(nullable = false)
private String operation;
private String oldData;
private String newData;
@Column(nullable = false)
private OffsetDateTime changedAt;
}Usage
Add to your sqldoc.config.ts:
typescript
export default {
dialect: 'postgres',
schema: ['./schema.sql'],
codegen: [
{
template: 'jpa',
output: './generated/Models.java',
},
],
}Then run:
bash
sqldoc codegen