Java 国际化数据库的Hibernate映射

Java 国际化数据库的Hibernate映射,java,internationalization,hibernate-mapping,hibernate-criteria,Java,Internationalization,Hibernate Mapping,Hibernate Criteria,我想根据hibernate查询中提供的语言环境从数据库中获取国际内容。这是一个关于hibernate映射的问题,但如果我的错误,请随意提出更好的数据库设计 我的数据库设计(简化): 所以我有一个包含不可翻译数据的表,还有一个包含已翻译内容的表,但还有一个字段“locale”,用于区分语言 我的java类如下所示: public class Car { private Long id; private Long length; private Long weight; private CarTr

我想根据hibernate查询中提供的语言环境从数据库中获取国际内容。这是一个关于hibernate映射的问题,但如果我的错误,请随意提出更好的数据库设计

我的数据库设计(简化): 所以我有一个包含不可翻译数据的表,还有一个包含已翻译内容的表,但还有一个字段“locale”,用于区分语言

我的java类如下所示:

public class Car {

private Long id;
private Long length;
private Long weight;
private CarTranslated carTranslated;

// getters and setters

public class CarTranslated {

private Long id;
private Long carId;
private String desc;

// getters and setters
我想通过一次查询就能得到一辆车。对于常规jdbc,我将使用类似以下内容的sql查询:

public Car getById(Long id, Locale locale) {
Car c = new Car();
String sql = "select c.car_id, c.length, c.weight, ct.id, ct.descryption, 
ct.car_id as "Translated car_id" from car c join car_translated ct on
(c.car_id =   ct.car_id) where c.car_id ="+ id+" and ct.locale ='"+locale+"'";

// code to set fields of the object using ResultSet

return c;
}
对于此设置,什么是hibernate注释映射和查询?我试了几次,但都没有成功。目前我的最佳尝试如下:

映射:

@Entity
@Table(name="CAR")
public class Car {

@Id
@Column(name="car_id")
private Long carId;

@Column (name="weight")
private Long carWeight;

@Column (name="length")
private Long carLength;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name ="CAR_ID")
private CarTranslated localized;

// getters and setters

@Entity
@Table(name="CAR_TRANSLATED")
public class CarTranslated {

@Id
@Column (name="id")
private Long id;

@Column (name="car_id")
private Long carId;

@Column (name="descryption")
private String desc;

@Column(name="locale")
private Locale locale;
DAO:

public Car getCarById(Locale locale, Long id) {
    Car car = new Car();
    try {
        Session session = HibernateUtils.getSessionFactory().openSession();
        Criteria cr = session.createCriteria(Car.class)
            .add(Restrictions.eq("carId", id));
        Criteria cr1 = session.createCriteria(CarTranslated.class)
            .add(Restrictions.eq("locale", locale));

        car = (Car) cr.uniqueResult();
        car.setLocalized((CarTranslated) cr1.uniqueResult());
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return car;
}

这是一个解决方法,我想知道什么是正确的方法来实现这一点?

映射到FK时,两列上都应该有注释。()