Hibernate复合主键的使用

用到复合主键,它的查询方法我不太熟悉。
hbm.xml是这样的。[code="java"]


















[/code]

EmpInfo .java是这样的 太长,去掉一部分
[code="java"]public class EmpInfo implements java.io.Serializable {

// Fields

private EmpInfoId id;

// Constructors

/** default constructor */
public EmpInfo() {
}

/** full constructor */
public EmpInfo(EmpInfoId id) {
    this.id = id;
}

// Property accessors

public EmpInfoId getId() {
    return this.id;
}

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

}[/code]
EmpInfoId.java是这样的。
[code="java"]

public class EmpInfoId implements java.io.Serializable {

// Fields

private Integer empId;
private String empCode;
private String empName;
private String empSex;

// Property accessors

public Integer getEmpId() {
    return this.empId;
}

public void setEmpId(Integer empId) {
    this.empId = empId;
}

public String getEmpCode() {
    return this.empCode;
}

public void setEmpCode(String empCode) {
    this.empCode = empCode;
}

}[/code]
请问我想查我通过empCode empName改如何做?
我的代码如下,但是失败:
[code="java"]Criteria cr1=this.getSession().createCriteria(EmpInfo.class);
cr1.add(Restrictions.eq("id.empCode", cardNo));
EmpInfo empInfo=(EmpInfo) cr1.uniqueResult();
if(empInfo!=null){
System.out.println(empInfo.getId().getEmpName());
}[/code]
[b]问题补充:[/b]
大哥,myeclispe生成的就是这样的啊!
[b]问题补充:[/b]
也,那几个大佬呢?
[b]问题补充:[/b]
你这样的方法我刚才自己试过,但是查到的为null,应该不能为null才对。我在用sql试一下。谢谢你!可以继续关注。
[b]问题补充:[/b]
String sql="select * from SmartCardDB.dbo.EmpInfo as emp where emp.empCode="+cardNo;
SQLQuery sq=this.getSession().createSQLQuery(sql); 怎么把这个sq得到的数据迭代出来?

[b]问题补充:[/b]
大哥,这个不行的,如果直接用jdbc肯定是可以,刚才我想和你一样去改配置文件和POJO的,但是不知道怎么去改配置文件!不管怎么说,会给你的。
[b]问题补充:[/b]
code="java"]List list = sq.list();[[/code]之后呢?还是没有办法去读取每一个字段的值。还是想改pojo和配置文件。

5个回答

[quote]大哥,这个不行的,如果直接用jdbc肯定是可以,刚才我想和你一样去改配置文件和POJO的,但是不知道怎么去改配置文件!不管怎么说,会给你的。 [/quote]
empId 是你的主键吧,把那些属性全部弄到EmpInfo类中,在EmpInfo类中去掉EmpInfoId这个对象,然后修改hbm配置文件,去掉下面这句
[code="xml"]

























[/code]

改为
[code="xml"]

<!--生成策略自己定-->







<!--如此类推-->[/code]

倒,empName怎么会放在EmpInfoID主键类里面呢?
建议你修改一下这个主键类,改成如下:

[code="java"] public class EmpInfoId implements java.io.Serializable {

 // Fields  

 private Integer empId;  
 private String empCode;   

 // Property accessors  

 public Integer getEmpId() {  
     return this.empId;  
 }  

 public void setEmpId(Integer empId) {  
     this.empId = empId;  
 }  

 public String getEmpCode() {  
     return this.empCode;  
 }  

 public void setEmpCode(String empCode) {  
     this.empCode = empCode;  
 }  

} [/code]

然后实例化这个EmpInfoID,最后根据这个ID去找EmpInfo,把name和sex放在EmpInfo里面。

给这个EmpInfoId加一个空的构造方法和一个包含全属性的构造方法。
然后先实例化一个EmpInfoId的对象,然后根据这个对象去找到EmpInfo对象。

[code="java"] EmpInfoId empInfoId = new EmpInfoId();
empInfoId.setEmpCode(cardNo);
Criteria cr1=this.getSession().createCriteria(EmpInfo.class);

cr1.add(Restrictions.eq("empInfoId", empInfoId));

EmpInfo empInfo=(EmpInfo) cr1.uniqueResult();

if(empInfo!=null){

System.out.println(empInfo.getId().getEmpName());

. } [/code]

[quote]你这样的方法我刚才自己试过,但是查到的为null,应该不能为null才对。我在用sql试一下。谢谢你!可以继续关注。[/quote]

老兄,说实话,如果是我碰到这种问题,我会去改配置文件和POJO的,呵呵,就是去掉myeclipse自动生成的主键类,然后改配置文件,也去掉id属性中的主键类。

[quote]String sql="select * from SmartCardDB.dbo.EmpInfo as emp where emp.empCode="+cardNo;
SQLQuery sq=this.getSession().createSQLQuery(sql); 怎么把这个sq得到的数据迭代出来? [/quote]

[code="java"]List list = sq.list();[/code]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Hibernate为什么不推荐使用联合主键
Hibernate为什么不推荐使用联合主键,能说明一下原因吗?谢谢!
求助:hibernate联合主键 (注解),测试时一直报null
@Entity @Table(name="SysRoleResource") @IdClass(value=RoleResourcePK.class) @JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"}) public class RoleResource implements Serializable{ private static final long serialVersionUID = 6109494575468275047L; private Integer RoleId; private Integer ResourceId; @Id @Column(length=10,name="RoleId") public Integer getRoleId() { return RoleId; } public void setRoleId(Integer roleId) { RoleId = roleId; } @Id @Column(length=10,name="ResourceId") public Integer getResourceId() { return ResourceId; } public void setResourceId(Integer resourceId) { ResourceId = resourceId; } @Override public String toString() { return "RoleResource [RoleId=" + RoleId + ", ResourceId=" + ResourceId + "]"; } }//实体类 //主键类 public class RoleResourcePK implements Serializable{ private static final long serialVersionUID = -3149726451195304787L; private Integer RoleId; private Integer ResourceId; public Integer getRoleId() { return RoleId; } public void setRoleId(Integer roleId) { RoleId = roleId; } public Integer getResourceId() { return ResourceId; } public void setResourceId(Integer resourceId) { ResourceId = resourceId; } @Override public String toString() { return "RoleResourcePK [RoleId=" + RoleId + ", ResourceId=" + ResourceId + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((ResourceId == null) ? 0 : ResourceId.hashCode()); result = prime * result + ((RoleId == null) ? 0 : RoleId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RoleResourcePK other = (RoleResourcePK) obj; if (ResourceId == null) { if (other.ResourceId != null) return false; } else if (!ResourceId.equals(other.ResourceId)) return false; if (RoleId == null) { if (other.RoleId != null) return false; } else if (!RoleId.equals(other.RoleId)) return false; return true; } } //测试 @Test public void add(){ RoleResource rr=new RoleResource(); rr.setResourceId(2); rr.setRoleId(1); try { rs.save(rr); System.out.println("添加成功"+JSON.toJSONString(rr)); } catch (Exception e) { System.out.println("添加失败"+e.getMessage()); } } 测试时一直报null org.springframework.orm.hibernate4.HibernateTransactionManager.afterPropertiesSet(360) | Using DataSource [com.mchange.v2.c3p0.ComboPooledDataSource[ identityToken -> 1hgeest9m680zit10ue8ko|72534f6f, dataSourceName -> 1hgeest9m680zit10ue8ko|72534f6f ]] of Hibernate SessionFactory for HibernateTransactionManager null 添加失败null 这是我的数据源配置及 sessionFactory配置 <!-- 配置数据源 c3p0 --> destroy-method="close"> <!-- 请求超时时间 --> <property name="checkoutTimeout" value="30000" /> <!-- 每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 --> <property name="idleConnectionTestPeriod" value="30" /> <!-- 连接数据库连接池最大空闲时间 --> <property name="maxIdleTime" value="30" /> <!-- 连接池初始化连接数 --> <property name="initialPoolSize" value="5" /> <property name="minPoolSize" value="5" /> <property name="maxPoolSize" value="20" /> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 --> <property name="acquireIncrement" value="5" /> </bean> <!-- 配置hibernate的SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 注入数据源 相关信息看源码 --> <property name="dataSource" ref="dataSource" /> <!-- hibernate配置信息 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.enable_lazy_load_no_trans">true</prop> <!-- 开启二级缓存 ehcache --> <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop> <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop> <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.cache.provider_configuration_file_resource_path} </prop> </props> </property> <!-- 扫描hibernate注解配置的entity --> <property name="packagesToScan" value="cn.com.topsoft.entity" /> </bean>
Hibernate4 复合主键没法使用缓存啊
代码如下,在执行查询的时候,缓存无效果,非复合主键的都正常进入缓存 ``` @Embeddable @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class StudentClassesPK implements Serializable{ private static final long serialVersionUID = 8086967036014159916L; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "student_id",referencedColumnName="id",nullable=true) private Student student; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "classes_id",referencedColumnName="id",nullable=true ) private Classes classes; /** * 进入某个班级的时间 */ private Date startDate = new Date(); public StudentClassesPK(){ } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((classes == null) ? 0 : classes.hashCode()); result = prime * result + ((startDate == null) ? 0 : startDate.hashCode()); result = prime * result + ((student == null) ? 0 : student.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; StudentClassesPK other = (StudentClassesPK) obj; if (classes == null) { if (other.classes != null) return false; } else if (!classes.equals(other.classes)) return false; if (startDate == null) { if (other.startDate != null) return false; } else if (!startDate.equals(other.startDate)) return false; if (student == null) { if (other.student != null) return false; } else if (!student.equals(other.student)) return false; return true; } @Override public String toString() { return "StudentClassesPK [student=" + student + ", classes=" + classes + ", startDate=" + startDate + "]"; } } ``` ``` @Entity @Table(name="T_ClassesStudent") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,region="com.kmp.business.entity.StudentClasses") public class StudentClasses extends BaseEntity{ private static final long serialVersionUID = -6300584354851171783L; @EmbeddedId StudentClassesPK pk = new StudentClassesPK(); /** * 离开某个班级的时间 */ private Date endDate; public StudentClassesPK getPk() { return pk; } public void setPk(StudentClassesPK pk) { this.pk = pk; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } @Override public String toString() { return "StudentClasses [pk=" + pk + ", endDate=" + endDate + "]"; } ```
Hibernate联合主键一对多映射无法执行select count(distinct parent) from parent
问题是这样的,Parent对象和Child对象存在一对多的关系,其定义如下: [code="java"] Parent { public static class CompositeId { private String keyCol1; private String keyCol2; //set get方法省略了 } private CopositeId compId; private String parentProp; private Set<Child> children = new HashSet<Child>(); //set get.... } Child { private Long id; private String childCol1; private String childCol2; private String childProp; //set get... } [/code] 配置文件如下: [code="java"] <class name="pkgpath.Parent" table="Parent"> <composite-id name="compId" class="pkgpath.Parent$CompositeId"> <key-property name="keyCol1" column="KEY_COL1"/> <key-property name="keyCol2" column="KEY_COL2"/> </composite-id> <property name="parentProp" type="java.lang.String"> <column name="Parent_Prop"/> </property> <set name="children"> <key> <column name="childCol1"/> <column name="childCol2"/> </key> <one-to-many class="pkgpath.Child"/> </set> </class> <class name="pkgpath.Child" table="Child"> <id name="id" type="java.lang.Long"> <column name="ID"/> <generator class="sequence"> <param name="sequence">ID_SEQ</param> </generator> </id> <property name="childCol1" type="java.lang.String"> <column name="Child_Col1"/> </property> <property name="childCol2" type="java.lang.String"> <column name="Child_Col2"/> </property> <property name="childProp" type="java.lang.String"> <column name="Child_Prop"/> </property> </class> [/code] 在使用 select count(distinct parent) from Parent parent left join parent.children child where child.childProp='xxx' 时,程序报了如下异常信息:Caused by: java.sql.SQLException: ORA-00907: 缺失右括号 查看了Hibernate执行的SQL脚本,发现转化成的SQL为: select * from ( select count(distinct(parent.keyCol1,parent.keyCol2)) from Parent parent,Child child Where parent.keyCol1=child.child_col1(+) and parent.keycol2=child.child_col2(+) and child.child_prop='xxx' 请教怎么才能获取真实的不重复的Parent的个数呢?
hibernate注解配置一对多并且一方为联合主键
hibernate注解配置单向一对多(配置在一的一方)并且一的一方为联合主键,这个该怎么配置,最好是写一个demo
这种hibernate的一对多复合主键如何解决?
最近要解决一个遗留下来的系统, 里面有一个2个表 A,B A对B是一对多的关系 A: ---------- ID name B: --------- ID name A_ID B里面由 ID和A_ID共同决定一条唯一的记录,然后我把B里面的ID和A_ID 新建了一个B_PK.class,作为B的主键 然后B.java 如下 [code="java"]public class B { private B_PK b_pk; private A a; 。。。。 @ManyToOne @JoinColumn(name="a_id") public A getA() { return a; } }[/code] 但是这样定义的时候报错Repeated column in mapping for entity。。。 请问,类似于这样的问题,如何解决才好? 我觉得我解决的思路好像有问题 [b]问题补充:[/b] 最近要解决一个遗留下来的系统, 里面有一个2个表 A,B A对B是一对多的关系 A: ---------- ID name B: --------- ID name A_ID B里面由 ID和A_ID共同决定一条唯一的记录,然后我把B里面的ID和A_ID 新建了一个B_PK.class,作为B的主键 然后B.java 如下 <pre name="code" class="java">public class B { private B_PK b_pk; private A a; 。。。。 @ManyToOne @JoinColumn(name="a_id") public A getA() { return a; } }</pre> 但是这样定义的时候报错Repeated column in mapping for entity。。。 请问,类似于这样的问题,如何解决才好? 我觉得我解决的思路好像有问题 ----------------- 谢谢jones,我不用B_PK.class这个主键了,仿照 [code="java"]@Entity @Table(name="VCUST") @DiscriminatorValue("VCUST") @PrimaryKeyJoinColumns({ @PrimaryKeyJoinColumn(name="CUST_ID",referencedColumnName="ID"), @PrimaryKeyJoinColumn(name="CUST_TYPE",referencedColumnName="TYPE") }) public class ValuedCustomer extends Customer { ... }[/code] 但是报错说:Caused by: org.hibernate.AnnotationException: No identifier specified for entity: 怎么会这样?我应该如何做? [b]问题补充:[/b] [color=red]---------- 谢谢 jones ,继续补充---------------[/color] 对于一般的复合主键,以上的答案早就解决问题了,但是现在报错: Unable to find properties (a_id) in entity annotated with @IdClass:B_PK 因为复合主键的其中一个字段是多对一关联到A的 @JoinColumn(name="a_id") ,所以报了这个错,这里又不知道怎么处理了。 还请jones帮忙看一下 [b]问题补充:[/b] 搞定了,不是有没有什么副作用 @IdClass(B_PK.class) @Entity public class B { private int ID; private A a; private int a_id; @Id public int getID(){ return ID; } @Id public int getA_Id(){ return a_id; } 。。。。 @ManyToOne @JoinColumn(name="a_id") public A getA() { return a; } } 也就是在B里面增加一个a_id, 这样子就可以了,反正运行起来了,不知道是否合理
spring rest+spring jpa怎么获取联合主键的值。
# 目的:想获取中间表的值。 ## 方式 **1、联合主键。** ``` public class PersonAndLanguageId implements Serializable { private Long languageId; private Long personId; } ``` **2、实体类** ``` @Entity @Data @IdClass(PersonAndLanguageId.class) public class PersonLanguage implements Serializable { @Id @Column(name = "person_id") private Long personId; @Id @Column(name = "language_id") private Long languageId; @Column(name = "name") private String name; } ``` **3、仓库** ``` @Repository public interface PersonLanguageDao extends JpaRepository<PersonLanguage, PersonAndLanguageId> { } ``` **4、请求** ``` http://localhost:8001/jpa/personLanguages/?sort=id,desc&page=0&size=3 ``` **5、结果** ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570496492_371833.png) ![图片说明](https://img-ask.csdn.net/upload/201910/08/1570496560_146413.png) **请问** 为什么获取不到联合主键的值,怎么才能获取联合主键的值?
请教S2SH整合,hibernate的多对多关系!联合主键查询问题!求指教!!!!!!!!!
goods商品表 int goodsid 自增,主键 varchar goodsName varchar goodsAdress relation中间表 int goods_id 主键 (无自增) 是goods表的外键 int stor_id 主键(无自增)是stor表的外键 int goodsNum int price stor 仓库表 int stor_id 主键,自增 varchar storName varchar storAdress S2SH整合 这3个Pojo类和hibernate.hbm.xml是逆向自动生成的。 怎么查询出3个表中所有的数据同时传递到JSP页面。越详细越好!注重方法! 谢谢。。求指教 !!
关于jpa联合主键,且主键同时为其他表外键时的配置
现有3张表 1、user表 id, username, password 2、role表 id, role 3 用户角色中间表 use_role user_id, role_id, 其中,user_id,与role_id为复合主键,且分别引用user表的id跟role表的id,请问他们之间的关系用jpa我该如何配置?
hibernate配置实体中的多对多,但是我想给第三方表另外设置一个主键,怎么办
@ManyToMany @JoinTable(name="T_S", joinColumns={ @JoinColumn(name="TID") }, inverseJoinColumns={ @JoinColumn(name="SID") } ) 这么写会把TID和SID当成联合主键,但是我想弄个自然主键,不知道怎么写,大牛们帮忙,难道我要为写本地SQL维护这个关系吗?
知道复合主键中一个字段属性值,如何得到另一个字段属性值
我的复合主键是由2个字段组成的,现在能拿到其中一个字段的值,不知道如何拿到另一个值?小弟诚请各位高手解决,online等!谢谢了
复杂的多对一双向关系求解(多端联合主键,其中一个键为一端的主键)
经网上查阅资料仍没有找到解决方法 <br />不知该如何写两个pojo的配置文件 <br />向各位达人请教<img src="/images/smiles/icon_biggrin.gif" /> <br /> <br />一端——Product <br /><pre name="code" class="java">public class Product { private Long productId; //id private String productName; //名称 private Set featureSet; //特性集合 ..... } </pre> <br /> <br />多端——Feature <br /><pre name="code" class="java">public class Feature implements Serializable { private Integer featureId; private String featureName; private Product product; .... } </pre> <br /> <br />数据库中Feature表的主键为productId和featureId组成的联合主键,并且featureId由我们自己set值(并非sequence) <br /> <br />请教各位达人 <br />万分感谢
请教hibernate many2one的问题
<id name="id" unsaved-value="0"> <generator class="native"></generator> </id> <many-to-one name="classA" class="A" column="aId" /> <many-to-one name="classB" class="B" column="bId" /> 为什么 使用自动建表,建出来的结构是 a/b是联合主键呢?
hibernate3.3+mysql日期格式Date类型,无法进行相等的比较
hibernate3.3+mysql,数据库表是联合主键,其中一个为Date类型。此时对日期进行比较时,结果不正确。应该如何修改? 表结构: CREATE TABLE `temp` ( `room_id` int(11) NOT NULL, `priceDate` date NOT NULL, `value` varchar(20) DEFAULT NULL, PRIMARY KEY (`room_id`,`priceDate`) ); 映射文件: <composite-id name="id" class="com.boang.hotel.entity.TempId"> <key-property name="roomId" type="java.lang.Integer"> <column name="room_id" /> </key-property> <key-property name="priceDate" type="java.util.Date"> <column name="priceDate" length="10" /> </key-property> </composite-id> <property name="value" type="java.lang.String"> <column name="value" length="20" /> </property> 测试代码大致如下: Date tempDate = DateUtils.parseDate("2013-04-10"); TempId id = new TempId(1, tempDate); Temp temp = new Temp(id, "123"); save(temp); Temp savedTemp = load(Temp.class, id); System.out.println(savedTemp); ------预计结果------ Temp@***** ------实际结果------ null 测试代码里的save和load,都是直接使用的getHibernateTemplate()里的save和load。 日期转换DateUtils.parseDate是用的SimpleDateFormat将字符串转为日期,格式为yyyy-MM-dd。 为什么load不到结果呢?原有的数据库设计就是这样的,目前无法进行结构与类型的修改。 现在需要对这样的表进行批量新增与更新数据,这时hibernate会自动使用load方法去根据ID判断是否存在数据,如果load结果为null,就会进行插入,这时就会报错,主键唯一约束的错误。 请大家帮忙看看,有没有什么好的解决办法???
hibernate关联查询问题
现在有两个表。用户表s_user对应实体类SUser和用户在线表s_online对应实体类SO nline,我要通过s_user的主键userid对s_online的主键userid进行关联查询, 其中这个s_user已经跟另外两个表进行关联查询,我就照样画葫芦加上相同的标记,然后启动tomcat的时候报错broken column mapping for: sOnline.id of: com.cn.model.SUser。 然后我再去SOnline查看sOnline属性什么情况,原来是加了一堆注解,,是一个复合主键,,我不清楚什么是复合主键,,,反正现在就是想知道怎么通过注解用s_user的userid字段查出SOnline对应的userid字段,,求帮忙 ```SUser关联查询部分代码 @ManyToOne @JoinColumn(name = "groupid", insertable = false, updatable = false) public SUsergroup getUsergroup() { return usergroup; } public void setUsergroup(SUsergroup usergroup) { this.usergroup = usergroup; } @ManyToOne @JoinColumn(name = "rateid", insertable = false, updatable = false) public SRate getsRate() { return sRate; } public void setsRate(SRate sRate) { this.sRate = sRate; } SOnline复合主键部分代码 private SOnlineId id; @EmbeddedId @AttributeOverrides({ @AttributeOverride(name = "userid", column = @Column(name = "userid", nullable = false, length = 16)), @AttributeOverride(name = "acctstart", column = @Column(name = "acctstart", nullable = false, length = 29)), @AttributeOverride(name = "acctid", column = @Column(name = "acctid", nullable = false, length = 32)) }) public SOnlineId getId() { return this.id; } public void setId(SOnlineId id) { this.id = id; } ```
为什么我用hibernate建表会出现如此诡异的情况?
最近在学着用anotation配置hibernate,结果发现一些诡异的情况…… 实体类: [code="java"] ackage com.yyz.beans; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name = "score") public class Score { private int sId; private Course cou; private Student stu; private double score; @Id @GeneratedValue public int getsId() { return sId; } public void setsId(int sId) { this.sId = sId; } public Score(Student s1, Course c1, double i) { this.stu=s1; this.cou=c1; this.score=i; } @ManyToOne @JoinColumn(name = "course_id") public Course getCou() { return cou; } public void setCou(Course cou) { this.cou = cou; } @ManyToOne @JoinColumn(name = "student_id") public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } } [/code] 然后我让hibernate自动帮我生成表,结果它给我来了这么个建表语句: [code="sql"] 22:37:41,130 DEBUG SchemaExport:377 - create table score ( sId integer not null, score double precision not null, course_id integer, student_id integer not null auto_increment, primary key (student_id, course_id) ) [/code] 明显我指定的主键是sid,为什么生成的建表语句里course_id和student_id为联合主键呢? 明显我设置了sid为自增长,为什么生成的建表语句里student_id成了自增长字段呢?
hibernate用annotation怎么设置字段唯一且不能为空?
用户表除了ID为主键还需要用户名字段唯一且不能为空。请问该怎么做。貌似联合主键是允许其中单个字段重复的。用annotation怎么设置呢?请详细说明。
主键为复合型id,URL地址传参是什么样的
{"success":"true","data":{"data":[{"description":"11","esname":"11",**_"id":{"hostname":"11","qmgrname":"11"}_**,"inittime":"11","port":"11","registrytime":"11","svrconn":"11"}],"pageInfo":{"countOfEverytime":true,"currentPageNum":1,"rowsOfPage":10,"totalPageCount":10,"totalRowCount":1}}}
HQL 多表查询
我有创建了一个字典的DB,里面有3张表:TB_EN_WORD,TB_EN_WORD_ATTR,TB_EN_WORD_EXMP,3张表都被设计为复合主键 表结构如下(“主”字代表主键): TB_EN_WORD: [table] DICT_ID(主) WORD_ID(主) WORD [/table] TB_EN_WORD_ATTR: [table] DICT_ID(主) WORD_ID(主) PART_OF_SPEECH(主) MEANING_NUM(主) EXTD_ATTR MEAN [/table] TB_EN_WORD_EXMP: [table] DICT_ID(主) WORD_ID(主) PART_OF_SPEECH(主) MEANING_NUM(主) EXAMPLE_NUM(主) EXAMPLE_EXTD_ATTR EN_EXMP EXMP_MEANING [/table] 3表之间的关联关系应该很明显的,现在我要实现一个功能:输入一个英语单词,查询出3张表中所有和这个单词相关的内容。为此,我设计了下面这样一条SQL: [code="sql"] select word.word , attr.extd_attr , attr.mean , exmp.dict_id , exmp.word_id , exmp.part_of_speech , exmp.meaning_num , exmp.example_num , exmp.example_extd_attr , exmp.en_exmp , exmp.exmp_meaning from tb_en_word_exmp exmp left join tb_en_word_attr attr on exmp.dict_id = attr.dict_id and exmp.word_id = attr.word_id and exmp.part_of_speech = attr.part_of_speech and exmp.meaning_num = attr.meaning_num left join tb_en_word word on attr.dict_id = word.dict_id and attr.word_id = word.word_id where word.word = 'test' [/code] 我用的ssh框架,这里需要用HQL来实现上面这句SQL,既然是多表查询,势必要修改hibernate的映射文件和table的实体类来实现表之间的关联关系,问题就在于我该如何表示它们之间的关联关系,我的疑点在于如何理解上面SQL里的left join? 理解1:tb_en_word_exmp左连接tb_en_word_attr,然后tb_en_word_attr左连接tb_en_word,这样一来,我想我应该修改tb_en_word_exmp的映射文件和实体类来实现tb_en_word_exmp到tb_en_word_attr的链接,然后同时修改tb_en_word_attr的映射文件和实体类来实现tb_en_word_attr到tb_en_word的链接; 理解2:tb_en_word_exmp左连接tb_en_word_attr,同时又左连接tb_en_word,这样一来,应该只要修改tb_en_word_exmp的映射文件和实体类来实现tb_en_word_exmp到tb_en_word_attr和tb_en_word的链接。 那么,到底哪种理解才是正确的呢,还是说两种方法都不对?请熟悉HQL的人教我一下,我是第一次用HQL的多表查询
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
立即提问