一些Hibernate问题

时间:2009-07-19 09:19:06

标签: java mysql hibernate

我有2个问题 我想制作具有charset utf8的Mysql表,但我不知道我在哪里设置设置。 (我只是有一个hibernate.cfg.XMl没有用于hibernate的任何.xml文件) 我不想设置mysql.ini文件,默认设置是UTF-8我想把这个设置放在我的休眠状态。

第二个问题: 我有这张桌子:

CREATE TABLE `buildingtel` (
`username` varchar(50) NOT NULL,
`buildingname` varchar(50) NOT NULL,
`tel` varchar(15) NOT NULL,
PRIMARY KEY (`username`,`buildingname`,`tel`),
KEY `FK_buildingtel_2` (`buildingname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我如何将这些映射到Java实体 我可以这样做:

@Entity
@Table(name = "btel")
public class Btel {

@Id
@GeneratedValue
@Column(name = "id")
private int id;;
@Column(name = "username", length=50)
private String username;
@Column(name = "buildingname", length=50)
private int buildingname;
@Column(name = "tel", length=15)
private int tel;
//some setter & getter
}

但我希望将(usernamebuildingnametel)设置为主键,以便我可以通过hibernate中的注释来完成它

TanX提前

1 个答案:

答案 0 :(得分:1)

对于UTF-8:

<property name=”hibernate.connection.useUnicode”
value=”true” />
<property name=”hibernate.connection.characterEncoding”
value=”UTF-8″ />

至于设置组合主键,这是可能的,但是使用它我可以说我不推荐它。来自the documentation

  

您可以定义复合主键   通过几种语法:

     
      
  • 将组件属性注释为@Id并创建组件类   @Embeddable
  •   
  • 将组件属性注释为@EmbeddedId
  •   
  • 将该类注释为@IdClass并注释该实体的每个属性   使用@Id
  • 参与主键   

使用起来很麻烦,并且不建议在Hibernate中执行此操作。

我建议使用the @NaturalId annotation

  

虽然没有用作标识符属性,   一些(一组)属性代表   实体的自然标识符。这个   架构时尤其如此   使用推荐的使用方法   代理主键即使是   自然业务密钥存在。过冬   允许映射这样的自然属性   并在Criteria查询中重用它们。   自然标识符由   所有标记为@NaturalId的属性。