【发布时间】:2016-06-08 15:17:32
【问题描述】:
我使用 Hibernate 将 Java 对象映射到 PostgreSQL 数据库。 UserDetails类是用于添加用户的实体类。它包含一个名为Address的嵌入对象。
UserDetails.java
@Entity
@Table(name="USER_DETAILS")
public class UserDetails {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="USER_ID")
private int userId;
@Column(name="USER_NAME")
private String userName;
@Temporal(TemporalType.DATE)
@Column(name="JOINED_DATE")
private Date joinedDate;
@Column(name="DESCRIPTION")
private String description;
@Embedded
private Address address;
}
Address 对象包含有关地址的详细信息,例如城市、密码、街道和州。
Address.java
import javax.persistence.Embeddable;
@Embeddable
public class Address {
private String street;
private String city;
private String state;
private String pincode;
}
包含main方法的类如下:
public class HibernateTest {
public static void main(String[] args){
UserDetails user = new UserDetails();
UserDetails user1 = new UserDetails();
user.setUserName("First User");
Address newAddress = new Address();
newAddress.setCity("Pune");
newAddress.setPincode("411057");
newAddress.setState("Maharashtra");
newAddress.setStreet("Hinjewadi");
user.setAddress(newAddress);
user.setDescription("just like that");
user.setJoinedDate(new Date());
user1.setUserName("Second User");
user1.setDescription("great here");
user1.setJoinedDate(new Date());
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.save(user1);
session.getTransaction().commit();
session.close();
user = null;
session = sessionFactory.openSession();
session.beginTransaction();
user = session.get(UserDetails.class, 1);
System.out.println(user.getUserName());
session.close();
sessionFactory.close();
}
}
生成的 SQL 查询如下,表明列的添加顺序与声明的顺序不同。
Hibernate: create sequence hibernate_sequence start 1 increment 1
Hibernate: create table USER_DETAILS (USER_ID int4 not null, city varchar(255), pincode varchar(255), state varchar(255), street varchar(255), DESCRIPTION varchar(255), JOINED_DATE date, USER_NAME varchar(255), primary key (USER_ID))
在hibernate中添加列有什么规则吗?
【问题讨论】:
-
我相信它会按照反射返回相应字段的顺序添加列,即。 e.没有特别的顺序
-
@SashaSalauyou:反射是什么意思?
-
简而言之,这是通过名称操作类/对象成员的Java API。 stackoverflow.com/questions/37628/…
标签: java sql hibernate postgresql create-table