java - 如何在hibernate中映射java属性

标签 java hibernate jpa jakarta-ee

我可以提供帮助,我正在向实体添加属性,但我不知道如何将其与相应的表关联

部分代码

import javax.persistence.*;
import java.text.SimpleDateFormat;
import java.util.Date;

@Entity
public class TransactionByFop
        extends BaseTransaction
{
    @ManyToOne
    private Transaction transaction;

    private int reject;

    //transbank context: TBK_ID_TRANSACCION; CAT context: IdCarro
    private Long internalTransactionId;

    //transbank context: TBK_TIPO_PAGO; CAT context: no es usado dejar en blanco
    private String internalPaymentType;

    //transbank context: TBK_NUMERO_CUOTAS; CAT context: NumeroCuotas
    private Integer installmentsNumber;

    //transbank context: no es usado dejar en blanco; CAT context: MontoCuota
    private Double installmentsAmount;

    //transbank context: TBK_FECHA_TRANSACCION; CAT context: FechaHoraAutorizacion
    private Date authDate;

    //transbank context: TBK_FINAL_NUMERO_TARJETA; CAT context: corresponde al número completo de la tarjeta si la transacción fué autorizada sin el password de seguridad, de lo contrario dejarlo en blanco.
    private String creditCardNumber;

    //transbank context: no es usado dejar en blanco; CAT context: Esta información no es explícita, pero puede ser deducida basada en alguna información
    private Boolean catSecureKeyFlag;

    //transbank context: no es usado dejar en blanco; CAT context: Viene basado en si el cliente está usando la clave de seguridad de lo contrario se deja en blanco
    private String catCustomerRUT;

    private String currency;

    private Double discountedAmount;

    public Transaction getTransaction()
    {
        return transaction;
    }

    public void setTransaction(Transaction transaction)
    {
        this.transaction = transaction;
    }

    public int getReject()
    {
        return reject;
    }

    public void setReject(int reject)
    {
        this.reject = reject;
    }

    public Long getInternalTransactionId()
    {
        return internalTransactionId;
    }

    public void setInternalTransactionId(Long internalTransactionId)
    {
        this.internalTransactionId = internalTransactionId;
    }

    public String getInternalPaymentType()
    {
        return internalPaymentType;
    }

    public void setInternalPaymentType(String internalPaymentType)
    {
        this.internalPaymentType = internalPaymentType;
    }

    public Double getDiscountedAmount() {
        return discountedAmount;
    }

    public void setDiscountedAmount(Double discountedAmount) {
        this.discountedAmount = discountedAmount;
    }


    public Integer getInstallmentsNumber()
    {
        return installmentsNumber;
    }

    public void setInstallmentsNumber(Integer installmentsNumber)
    {
        this.installmentsNumber = installmentsNumber;
    }

    public Double getInstallmentsAmount()
    {
        return installmentsAmount;
    }

    public void setInstallmentsAmount(Double installmentsAmount)
    {
        this.installmentsAmount = installmentsAmount;
    }

    public Date getAuthDate()
    {
        return authDate;
    }

    public void setAuthDate(Date authDate)
    {
        this.authDate = authDate;
    }

    public String getCreditCardNumber()
    {
        return creditCardNumber;
    }

    public void setCreditCardNumber(String creditCardNumber)
    {
        this.creditCardNumber = creditCardNumber;
    }

    public Boolean getCatSecureKeyFlag()
    {
        return catSecureKeyFlag;
    }

    public void setCatSecureKeyFlag(Boolean catSecureKeyFlag)
    {
        this.catSecureKeyFlag = catSecureKeyFlag;
    }

    public String getCatCustomerRUT()
    {
        return catCustomerRUT;
    }

    public void setCatCustomerRUT(String catCustomerRUT)
    {
        this.catCustomerRUT = catCustomerRUT;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public String getAuthDateFormatted()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String stringDate = null;
        if (null != this.authDate)
            stringDate = sdf.format(this.authDate);
        return stringDate;
    }

    public String getInstallmentsNumberFmt()
    {
        if (null == this.installmentsNumber || this.installmentsNumber == 0)
            return "00";
        String installments = this.installmentsNumber.toString();
        if (installments.length() == 1)
            return "0" + installments;
        return installments;
    }

    public String getInstallmentsAmountFmt()
    {
        if (null != this.installmentsAmount)
            return this.installmentsAmount.toString();
        return "";
    }

    public String getCatSecureKeyFlagFmt()
    {
        if (null != catSecureKeyFlag)
            return catSecureKeyFlag.toString();
        return null;
    }

    @Override
    public String toString()
    {
        return "[ id (" + id + ") : amount(" + amount +
                ") : id_fop(" + (fop == null
                                 ? ""
                                 : fop.getId()) + ") : " +
                ") : last_update=(" + lastUpdate + ") : " +
                ") : settled(" + settled + ") : settled_amount(" + settledAmount +
                ") : id_status(" + (status == null
                                    ? ""
                                    : status.getId()) + ")]";
    }
}

两个新属性是货币和折扣金额

继承类

@MappedSuperclass
public abstract class BaseTransaction
    extends DomainEntityId
{
    private static final Logger logger = LoggerFactory.getLogger(BaseTransaction.class);

    private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");

    // ------------ Atributos de clase -------------

    @Temporal(TemporalType.TIMESTAMP)
    @Column(updatable = false)
    protected Date created;

    @Temporal(TemporalType.TIMESTAMP)
    protected Date lastUpdate;

    protected double amount;

    protected boolean settled;

    protected double settledAmount;

    @ManyToOne
    protected FOP fop;

    @ManyToOne
    protected TransactionStatus status;

    protected String internalStatus;

    @Column(length = 1024)
    protected String internalDescription;

    protected String authorizationCode;

    // --------- metodos con logica de negocio ---------
    //TODO: delete this method as it should use DAO for better use in unit test
    public void setStatusRef(int status)
    {
        setStatus(JPA.em().getReference(TransactionStatus.class, status));
    }

    public boolean isAnyStatus(SupportedTransactionStatus... statuses)
    {
        if (status == null)
        {
            return false;
        }
        for (SupportedTransactionStatus s : statuses)
        {
            if (status.getId() == s.id())
            {
                return true;
            }
        }
        return false;
    }

    public boolean isStatus(SupportedTransactionStatus status)
    {
        return this.status != null && this.status.getId() == status.id();
    }

    public void approvePayment()
    {
        if (!isStatus(Approved))
        {
            logger.warn(MessageFormat.format(
                "Transaction [{0}] with FOP [{1}] was approved [{2}] with previous status [{3}]",
                id, fop.getId(), Approved.name(), status.getId()));
        }
        setStatusRef(Approved.id());
    }

    public void rejectPayment()
    {
        if (!isStatus(Rejected))
        {
            logger.warn(MessageFormat.format(
                "Transaction [{0}] with FOP [{1}] was rejected [{2}] with previous status [{3}]",
                id, fop.getId(), Rejected.name(), status.getId()));
        }
        setStatusRef(Rejected.id());
    }

    public void forceRejectPayment()
    {
        if (!isStatus(ForcedRejection))
        {
            logger.warn(MessageFormat.format(
                "Transaction [{0}] with FOP [{1}] was rejected [{2}] with previous status [{3}]",
                id, fop.getId(), ForcedRejection.name(), status.getId()));
        }
        setStatusRef(ForcedRejection.id());
    }

    public boolean isClosed()
    {
        return isAnyStatus(Approved, Rejected);
    }

    // -------- hooks y triggers -----------------------

    @PrePersist
    public void prePersist()
    {
        created = new Date();
        lastUpdate = created;
    }

    public void persist()
    {
        setStatusRef(NoFop.id());
        JPA.em().persist(this);
    }

    public void merge()
    {
        setStatusRef(NoFop.id());
        JPA.em().merge(this);
    }

    @PreUpdate
    public void preUpdate()
    {
        lastUpdate = new Date();
    }

    //region getters and setters
    public FOP getFop()
    {
        return fop;
    }

    public void setFop(FOP fop)
    {
        this.fop = fop;
    }

    public double getAmount()
    {
        return amount;
    }

    public String getAmountFmt()
    {
        return String.valueOf("$" + amount);
    }

    public void setAmount(double amount)
    {
        this.amount = amount;
    }

    public TransactionStatus getStatus()
    {
        return status;
    }

    public void setStatus(TransactionStatus status)
    {
        this.status = status;
    }

    public int getSettledInt()
    {
        return settled
           ? 1
           : 0;
    }

    public boolean isSettled()
    {
        return settled;
    }

    public void setSettled(boolean settled)
    {
        this.settled = settled;
    }

    public double getSettledAmount()
    {
        return settledAmount;
    }

    public String getSettledAmountFmt()
    {
        return String.valueOf("$" + settledAmount);
    }

    public void setSettledAmount(double settledAmount)
    {
        this.settledAmount = settledAmount;
    }

    public String getInternalStatus()
    {
        return internalStatus;
    }    

    public void setInternalStatus(String internalStatus)
    {
        this.internalStatus = internalStatus;
    }

    public String getInternalDescription()
    {
        return internalDescription;
    }

    public void setInternalDescription(String internalDescription)
    {
        this.internalDescription = internalDescription;
    }

    public String getAuthorizationCode()
    {
        return authorizationCode;
    }

    public void setAuthorizationCode(String authorizationCode)
    {
        this.authorizationCode = authorizationCode;
    }

    public String getCreatedFmt()
    {
        return DATE_FORMAT.format(created);
    }
    //endregion
}

最佳答案

使用@Table注释将实体与表映射。在此注释中,您必须给出表名称。并使用@Column注释为属性指定列名称。您必须为每个属性指定@Column,并在其中指定列名称。

import javax.persistence.*;
import java.text.SimpleDateFormat;
import java.util.Date;

@Entity
@Table(name = "table_name")
public class TransactionByFop
        extends BaseTransaction
{
    @ManyToOne
    private Transaction transaction;


    private int reject;

    //transbank context: TBK_ID_TRANSACCION; CAT context: IdCarro
    @Column(name = "column_name")
    private Long internalTransactionId;

    //transbank context: TBK_TIPO_PAGO; CAT context: no es usado dejar en blanco
    @Column(name = "column_name")
    private String internalPaymentType;

    //transbank context: TBK_NUMERO_CUOTAS; CAT context: NumeroCuotas
    @Column(name = "column_name")
    private Integer installmentsNumber;

    //transbank context: no es usado dejar en blanco; CAT context: MontoCuota
    @Column(name = "column_name")
    private Double installmentsAmount;

    //transbank context: TBK_FECHA_TRANSACCION; CAT context: FechaHoraAutorizacion
    @Column(name = "column_name")
    private Date authDate;

    //transbank context: TBK_FINAL_NUMERO_TARJETA; CAT context: corresponde al número completo de la tarjeta si la transacción fué autorizada sin el password de seguridad, de lo contrario dejarlo en blanco.
    @Column(name = "column_name")
    private String creditCardNumber;

    //transbank context: no es usado dejar en blanco; CAT context: Esta información no es explícita, pero puede ser deducida basada en alguna información
    @Column(name  = "column_name")
    private Boolean catSecureKeyFlag;

    //transbank context: no es usado dejar en blanco; CAT context: Viene basado en si el cliente está usando la clave de seguridad de lo contrario se deja en blanco
    private String catCustomerRUT;

    private String currency;

    private Double discountedAmount;

    public Transaction getTransaction()
    {
        return transaction;
    }

    public void setTransaction(Transaction transaction)
    {
        this.transaction = transaction;
    }

    public int getReject()
    {
        return reject;
    }

    public void setReject(int reject)
    {
        this.reject = reject;
    }

    public Long getInternalTransactionId()
    {
        return internalTransactionId;
    }

    public void setInternalTransactionId(Long internalTransactionId)
    {
        this.internalTransactionId = internalTransactionId;
    }

    public String getInternalPaymentType()
    {
        return internalPaymentType;
    }

    public void setInternalPaymentType(String internalPaymentType)
    {
        this.internalPaymentType = internalPaymentType;
    }

    public Double getDiscountedAmount() {
        return discountedAmount;
    }

    public void setDiscountedAmount(Double discountedAmount) {
        this.discountedAmount = discountedAmount;
    }


    public Integer getInstallmentsNumber()
    {
        return installmentsNumber;
    }

    public void setInstallmentsNumber(Integer installmentsNumber)
    {
        this.installmentsNumber = installmentsNumber;
    }

    public Double getInstallmentsAmount()
    {
        return installmentsAmount;
    }

    public void setInstallmentsAmount(Double installmentsAmount)
    {
        this.installmentsAmount = installmentsAmount;
    }

    public Date getAuthDate()
    {
        return authDate;
    }

    public void setAuthDate(Date authDate)
    {
        this.authDate = authDate;
    }

    public String getCreditCardNumber()
    {
        return creditCardNumber;
    }

    public void setCreditCardNumber(String creditCardNumber)
    {
        this.creditCardNumber = creditCardNumber;
    }

    public Boolean getCatSecureKeyFlag()
    {
        return catSecureKeyFlag;
    }

    public void setCatSecureKeyFlag(Boolean catSecureKeyFlag)
    {
        this.catSecureKeyFlag = catSecureKeyFlag;
    }

    public String getCatCustomerRUT()
    {
        return catCustomerRUT;
    }

    public void setCatCustomerRUT(String catCustomerRUT)
    {
        this.catCustomerRUT = catCustomerRUT;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public String getAuthDateFormatted()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String stringDate = null;
        if (null != this.authDate)
            stringDate = sdf.format(this.authDate);
        return stringDate;
    }

    public String getInstallmentsNumberFmt()
    {
        if (null == this.installmentsNumber || this.installmentsNumber == 0)
            return "00";
        String installments = this.installmentsNumber.toString();
        if (installments.length() == 1)
            return "0" + installments;
        return installments;
    }

    public String getInstallmentsAmountFmt()
    {
        if (null != this.installmentsAmount)
            return this.installmentsAmount.toString();
        return "";
    }

    public String getCatSecureKeyFlagFmt()
    {
        if (null != catSecureKeyFlag)
            return catSecureKeyFlag.toString();
        return null;
    }

    @Override
    public String toString()
    {
        return "[ id (" + id + ") : amount(" + amount +
                ") : id_fop(" + (fop == null
                                 ? ""
                                 : fop.getId()) + ") : " +
                ") : last_update=(" + lastUpdate + ") : " +
                ") : settled(" + settled + ") : settled_amount(" + settledAmount +
                ") : id_status(" + (status == null
                                    ? ""
                                    : status.getId()) + ")]";
    }
}

请引用hibernate annotations了解更多信息。

关于java - 如何在hibernate中映射java属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41600894/

相关文章:

java - 如何在 weburl 中使用 REST API Controller 返回 xls excel 文件响应

java - 带有类名的 exception.getMessage() 输出

java - 未找到 DataSource.groovy。 chalice 2.4.4

hibernate - 无法可靠地处理 'persist' 调用

mysql - Jpa一对多使用连接表

java - Java中函数作为参数

java - Kibana 查询语言到 java elasticsearch 查询

Hibernate @formula 不支持将 Cast() 作为 teradata 数据库的 int

java - 如何对几个实体使用两种不同的 Hibernate 缓存策略

MySQL Group by 查询特定条件