求hibernate达人帮忙解决一下复合主键中一个字段自增问题
@Entity@IdClass(GirlPK.class)public class Girl{ private int id; private String name; private int age; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public int getId() { return id; } public void setId(int id) { this.id = id; } @Id public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }public class GirlPK implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean equal(Object obj){ if(this == obj){ return true; } if(obj != null && obj.getClass() == GirlPK.class){ GirlPK target = (GirlPK)obj; if(target.getId() == getId() && target.getName().equals(getName())){ return true; } } return false; } public int hashCode(){ return getId()*7+getName().hashCode(); } public class Test { private static SessionFactory sessionFactory; private static ServiceRegistry serviceRegistry; public static void main(String[] args) { GirlPK gpk = new GirlPK(); Girl g = new Girl(); g.setAge(23); Configuration config = new Configuration().configure(); // 读取hibernate配置文件 serviceRegistry = new ServiceRegistryBuilder().applySettings( config.getProperties()).buildServiceRegistry(); sessionFactory = config.buildSessionFactory(serviceRegistry); // 创建SessionFactory Session session = sessionFactory.openSession(); session.beginTransaction(); session.save(g); session.flush(); session.getTransaction().commit(); }}drop table Girl create table Girl ( id int identity not null, name varchar(255) not null, age int not null, primary key (id, name) )
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:642)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:635)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:631)
at test.Test.main(Test.java:25)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)
... 12 more
大概意思好像就是和GirlPK的id的类型不匹配
小弟实在是没明白是怎么个不匹配
其实目的就是想在那个复合主键里面让id为自动生成,name为自己填写
求大大们帮忙看看怎样解决呗
[解决办法]
好像不能这样做吧 。。 你在哪里看 的饿 。。 我以前做 都是 先把这2个属性封装成一个对象,让id为主键。然后把这个对象当作一个主键来使用!!