【问题标题】:some Hibernate Question一些休眠问题
【发布时间】:2025-11-25 17:45:01
【问题描述】:

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

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

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
}

但我想将 (username,buildingname,tel) 一起设置为主键,我如何通过休眠中的注释来做到这一点

提前TanX

【问题讨论】:

    标签: java mysql hibernate


    【解决方案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 的属性。

    【讨论】: