当前位置: 首页 > 知识库问答 >
问题:

@冬眠中的公式模式

赵昊阳
2023-03-14

我正在阅读一些关于Hibernate的面试问题,并遇到了Hibernate派生的属性。我正在使用@Formula注释尝试一个简单的示例,但它不起作用。谁能告诉我我错过了什么。下面的代码片段

输出和SQL查询显示在最后。

实体(Employee.java)

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.Formula;

@Entity
@Table(name="EMPLOYEE")
public class Employee implements java.io.Serializable {

private static final long serialVersionUID = -7311873726885796936L;

@Id
@Column(name="ID")
private Integer id;

@Column(name="FIRST_NAME", length=31)
private String firstName;

@Column(name="LAST_NAME", length=31)
private String lastName;

@Column(name="MONTHLY_SALARY")
private float monthlySalary;

@Formula("MONTHLY_SALARY*12")
    private float yearlySalary;

public Employee() {
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public float getMonthlySalary() {
    return monthlySalary;
}

public void setMonthlySalary(float monthlySalary) {
    this.monthlySalary = monthlySalary;
}

public float getYearlySalary() {
    return yearlySalary;
}
}

hibernate.cfg.xml

<hibernate-configuration>
<session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
    <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="hibernate.connection.username">system</property>
    <property name="hibernate.connection.password">system</property>
    <property     name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
    <property name="hibernate.cache.use_query_cache">false</property>

    <property name="hibernate.jdbc.use_streams_for_binary">true</property>
    <property name="hibernate.jdbc.batch_size">0</property>
    <property name="hibernate.max_fetch_depth">3</property>
    <property name="hibernate.hbm2ddl.auto">create</property>
    <property name ="show_sql">true</property>
    <mapping class="Employee"/>
   <!--   <mapping class="dto.UserDetailsEmbeddedId"/>-->

</session-factory>
</hibernate-configuration>

测试类导入org.hibernate.会话;导入org.hibernate.会话工厂;导入org.hibernate.cfg.配置;公共类Hibernate测试{

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    SessionFactory factory = (new     Configuration()).configure().buildSessionFactory();
    Session session = factory.openSession();
    Employee employee = new Employee();
    employee.setFirstName("Tarun");
    employee.setLastName("bhatt");
    employee.setMonthlySalary(34000);
    employee.setId(12);

    session.beginTransaction();
    session.save(employee);
    session.getTransaction().commit();
    System.out.println("salary1 = "+employee.getYearlySalary());
    session.close();
    System.out.println("salary = "+employee.getYearlySalary());

}

}

产出工资1=0.0工资=0.0

查询HiberNate:创建表EMPLOYeE(ID号(10,0)不为空,FIRST_NAMEvarchar2(31 char),LAST_NAMEvarchar2(31 char),MONTHLY_SALARY浮点数,主键(ID))HiberNate:插入到EMPLOYeE(FIRST_NAME,LAST_NAME,MONTHLY_SALARY,ID)值 (?, ?, ?, ?)

共有1个答案

融宏伟
2023-03-14

@公式注释旨在在数据检索期间使用(SELECT用几句话来说),因此读取和员工看起来像

选择ID、FIRST_NAME、LAST_NAME、MONTHLY_SALARY、MONTHLY_SALARY*12作为年薪

@公式不适用于插入或更新

 类似资料:
  • 另一种方法是使用Crieteria关联,但关联只能与和一起工作! 请在这里帮帮我。

  • 配置类的应用程序侦听器时出现错误 这实际上是我的错误 ** 严重:配置类org的应用程序侦听器时出错。springframework。网状物上下文ContextLoaderListener java。lang.NoClassDefFoundError:javax/servlet/ServletContextListener **在爪哇。lang.ClassLoader。java上的findBoot

  • 这是财产, 编译过程中会抛出此错误, 原因:org.hibernate.tool.schema.spi.SchemaManagementException:模式验证:在表[产品]中的列[描述]中遇到错误的列类型;找到[long text(类型#LONGVARCHAR)],但期望[varchar(255)(类型#VARCHAR)] 我错过了什么?

  • 问题内容: 这些查询翻译器之间有什么区别(对于Hibernate用户而言,我的意思是不同)。互联网上的一些博客说基于ANTLR的翻译器更快。但是我认为,如果其中一个明显更好,那么Hibernate开发人员将删除另一个。那么..有什么区别?为什么我们都拥有它们?在什么情况下我应该选择第一还是第二?在什么情况下我不应该选择其中一位翻译? 问题答案: 这是 内部休眠配置 ; 它将在升级到版本3时实现 。

  • 我有一个应用程序,它使用hibernate使用注释创建初始数据库。 有人这样做过吗,如果有请告诉我怎么做。或者至少是另一种选择。是否所有的ORM更新都必须用sql脚本手动创建?

  • 我有两个类,“article”包含对“surchargegroup”的@manytoone引用,该“surchargegroup”指定了该文章的附加费。 另一个类“SurchargeGroup”包含一个父对象引用,它可以将附加费继承到“SurchargeGroup”,如果没有设置,则任何父对象都不提供附加费的情况是不可能的。 我现在的问题是,如果我调用“getSurcharge()”方法,我会得到